#C 函数递归

本文介绍了递归的基本概念,指出函数自己调用并需满足特定条件以避免栈溢出。通过求阶乘的递归实现,展示了递归过程和终止条件的重要性。
摘要由CSDN通过智能技术生成

一.什么是递归
简单来讲就是,函数自己调用自己,下面来看一个简单的代码:

#include <stdio.h>
int main()
{
     printf("函数递归\n");
     main();//main函数中又调用了main函数
     return 0;
}

这个代码运行起来的结果将会是不停的输出“函数递归”这四个字。为了让大家更好的理解函数自己调用自己这一句话,所以我举了这个例子。这个例子其实是一个错误的示范,会导致这个函数无限递归下去,无限递归会出现栈溢出的错误,因为每一次调用函数,都要为这一次函数的调用分配内存空间,二内存的空间是在栈区上分配的,所以会出现栈溢出(stack overflow)的错误。

二.函数递归的限制条件

  • 存在限制条件,当满足限制条件,递归停止
  • 每次递归调用之后越来越接近限制条件

函数递归一定要满足上述两个条件,没有条件就会出现栈溢出,空间不足的错误,就如我上面举到的例子。

三.函数递归的举例
让我们通过一个练习来更深刻的认识函数递归

求n的阶乘,0的阶乘为1
思路:
1!= 1
2!= 1 x 2
3!= 1 x 2 x 3
4!= 1 x 2 x 3 x 4
n!= 1 x 2 x 3 x 4 x ······x n
从上面几个式子我们能得出3!= 2!x3;4!= 3!x4;那么n!= (n-1)xn.
它的递归条件就是当n=0时,停止对函数的调用,返回值为1.

#include <stdio.h>
int Fact(int n)
{
    if(n > 0)//递归的限制条件
    {
      return n*Fact(n - 1);//对函数Fact进行多次调用
    }
    else
    return 1;
}
int main()
{
   int n = 0;
   scanf("%d",&n);
   int sum = Fact(n);
   printf("%d! = %d\n",n,sum);
   return 0;
}

让你们能更好的理解这段代码我用5!来解释一下:

函数如何自己调用自己,并进行返回的
上面的图片清楚的展示函数是如何将递归的,就是将实数不断的递推出去,然后将返回值不断的归回来,最后得出最终的返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值