递归
啥是递归啊
递归是解决问的一种方式,简单来说,就是函数自己调用自己
递归解决问题
把复杂的大问题转化为一个一个与原文题相似的小问题。递归的思想就是把大事化小
在递归中,递就是递推,归就是回归
递归中的限制条件
- 递归必须存在限制条件,当满足这个条件时,递归不在继续
- 每次递归调用之后要越来越接近这个条件
否则就会死循环
递归举例
求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
这是递归中递推的过程
等到递推结束,得到最后一个的值,我们可以借助最后一个值层层带入上面的表达式,而带回到前面表达式的过程就是回归的过程
这样就是一个完整递归函数运行的过程
递归和迭代
递归是一个很好的技巧,但是在很多情况下不适合用递归,就比如说运行计算量很大,递归层次太深的问题
因为如果说是递归层次太深,函数的调用就回一直占用空间
所以如果不用递归,那么我们可以选择平常的方法,就是迭代,也是我们经常说的循环
总的来说,递归只是一个方法,很少有情况是必须用递归来算,如果遇到计算过程冗长的递归算法,我们可以使用迭代的方式来写代码
如果觉得有用可以点一下赞和关注,也可以先收藏以防需要时找不到哦,当然如果作者写的哪里有问题欢迎指出,我们一起进步!!!
祝看到这里的人天天开心哦(笔芯)