C语言之函数的递归

#define _CRT_SECURE_NO_WARNINGS 1
#include
//最简单的递归
int main()
{
    printf("hehe\n");
    main();
    return 0;
}

//练习1:接受一个整型值,按顺序打印它的每一位
//例如:输入1234  输出 1 2 3 4

#include
void print(int n)
{
    if (n > 9)
    {
        print(n/10);
    }
    printf("%d ", n % 10);
}

int main()
{
    int num = 0;
    scanf_s("%d", &num);
    print(num);
    return 0;
}

//练习2:编写函数不允许创建临时变量,求字符串的长度

#include
//有创建了临时变量count
int my_strlen(char* str)
{
    int count = 0;
    while (*str != '\0')
    {
        count++;
        str++;
    }
    return count;
}
//函数递归的方法
//把大事化小
//my_strlen("bit")'
//1+my_strlen("it");
//1+1+my_strlen("t");
/1/+1+1+my_strlen("")
//1+1+1+0
//3
int my_strlen(char* str)
{
    if (*str != '\0')
        return 1 + my_strlen(str + 1);
    else
        return 0;
}

int main()
{
    char arr[] = "bit";
    int len = my_strlen(arr);//arr是数组,数组传参,传过去的不是整个数组,而是第一个元素的地址
    printf("%d\n", len);
    return 0;
}

//练习3:求n的阶乘

#include
Fac1(int i)
{
    int j = 0;
    int ret = 1;
    for (j = 1; j <= i; j++)
    {
        ret *= j;
    }
    return ret;
}
int Fac2(int n)
{
    if (n <= 1)
        return 1;
    else
        return n * Fac2(n - 1);
}
int main()
{
    int i = 0;
    
    scanf_s("%d", &i);
    /*int ret=Fac1(i);*///循环的方式
    int ret = Fac2(i);
    printf("%d ", ret);
    return 0;
}

//练习4:求第n个斐波那契数

#include
Fib(int n)//递归的方式 但求第50个数的时候受限

    if (n <= 2)
        return 1;
    else
        return Fib(n - 1) + Fib(n - 2);
}
Fib(int n)//循环的方式
{
    int a = 1;
    int b = 1;
    int c = 1;
    while (n > 2)
    {
        c = a + b;
        a = b;
        b = c;
        n--;
    }
    return c;
}
int main()
{
    int n = 0;
    int ret = 0;
    scanf("%d", &n);
    TDD - 测试驱动开发
    ret = Fib(n);
    printf("%d", ret);
    return 0;
}

你可能感兴趣的:(c语言,算法,开发语言)