《重生到现代之从零开始的C语言生活》——函数递归

递归

啥是递归啊

递归是解决问的一种方式,简单来说,就是函数自己调用自己

递归解决问题

把复杂的大问题转化为一个一个与原文题相似的小问题。递归的思想就是把大事化小
在递归中,递就是递推,归就是回归

递归中的限制条件

  • 递归必须存在限制条件,当满足这个条件时,递归不在继续
  • 每次递归调用之后要越来越接近这个条件

否则就会死循环

递归举例

求n的阶乘

n的阶乘的公式是n!=n*(n-1)

这样思路就出来了
n=0时,n的阶乘是1,其余的阶乘都是按照公式计算

创造一个函数jiecheng( )
然后根据公式jiecheng(n)= n*jiecheng(n-1)

然后写出递归函数

#include<stdio.h>
int jiecheng(int n)
{
    if(n == 0)
  {
       return 1;
  }
    else
      return n*jiecheng(n-1);

}
int main()
{
    int n = 0;
    scanf("%d",n);
    int j = jiecheng(n);
    printf("%d",j);
      return 0;
}

运行过程大概是怎么样的呢

就是jiecheng(n)=n*jiecheng(n-1)

但是jiecheng(n-1)我们不知道,所以我们还需要知道jiecheng(n-1)

根据公式可知jiecheng(n-1)=(n-1)*jiecheng(n-2)

以此类推

等到最后jiecheng(2)=2*jiecheng(1) jiecheng(1)=1*jiecheng(0)

最后算出jiecheng(0)=1

这是递归中递推的过程

等到递推结束,得到最后一个的值,我们可以借助最后一个值层层带入上面的表达式,而带回到前面表达式的过程就是回归的过程
这样就是一个完整递归函数运行的过程

递归和迭代

递归是一个很好的技巧,但是在很多情况下不适合用递归,就比如说运行计算量很大,递归层次太深的问题
因为如果说是递归层次太深,函数的调用就回一直占用空间

所以如果不用递归,那么我们可以选择平常的方法,就是迭代,也是我们经常说的循环

总的来说,递归只是一个方法,很少有情况是必须用递归来算,如果遇到计算过程冗长的递归算法,我们可以使用迭代的方式来写代码


如果觉得有用可以点一下赞和关注,也可以先收藏以防需要时找不到哦,当然如果作者写的哪里有问题欢迎指出,我们一起进步!!!

祝看到这里的人天天开心哦(笔芯)

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值