0
点赞
收藏
分享

微信扫一扫

C语言学习之旅 【函数(二)】

1.函数递归

1.1 什么是递归?

函数直接或者间接的调用自己的技巧

简言之,大事化小

  1. 实例1
    ```c++
    int main()
    {
    printf("hehe");
    main();
    return 0;
    } // 会陷入死循环,死递归
    
    ### 1.2 递归条件
    ==递归的两个条件(递归的必要条件,缺一不可)==
  2. 存在限制条件,当满足限制条件的时候,递归停止
  3. 每次递归调用后要逐渐接近这个限制条件
    C语言学习之旅 【函数(二)】

1.3 递归的异常

当出现 stack overflow 表示栈溢出,每次函数调用都会分配一个空间

死递归必定栈溢出!
递归层次不能太深!

  1. 实例二(满足两个必要条件但出现了栈溢出)
    ```c++

//递归层次过深,出现栈溢出
void test(int i)
{
if (i < 10000)
{
test(i + 1);
}
}

int main()
{
test(1);
return 0;
}

![](%E5%87%BD%E6%95%B0%EF%BC%88%E4%BA%8C%EF%BC%89_md_files/08134ce0-0fa0-11ed-b397-bd9e2ee5cf57.jpeg?v=1&type=image)

3. 实例三
```c++

//模拟实现strlen函数
int my_strlen(char* str)
{
    if (*str != '\0')
        return 1 + my_strlen(str + 1);
    else
        return 0;
}

int main()
{
    char arr[20] = "lucool";
    printf("%d", my_strlen(arr));
    return 0;
}
  1. 实例4
    ```c++
    //实现n的阶乘
    int Fac(int n)
    {
    if(n > 1)
    {
    return n * Fac(n - 1);
    }
    return 1;
    }

int main()
{
int n = 10;
int fac = 0;
fac = Fac(n);
printf("%d", fac);
return 0;
}


5. 实例5
```c++
//斐波那契数列 -- 调用次数过多,导致运行效率低下
1. 递归实现 -- 效率较低
int Fab(int n)
{
    if (n > 2)
        return Fab(n - 1) + Fab(n - 2);
    else
        return 1;
}

int main()
{
    int n = 10;
    int fab = 0;
    fab = Fab(n);
    printf("%d\n", fab);
    return 0;
}
举报

相关推荐

0 条评论