1.什么是递归
递归是一种解决问题的方法,简单来说就是函数自己调用自己。可以理解为一种抽象的思维方式,我们需要一些宏观思维才能更好的理解递归。
递归中递就是递推,归就是回归。
需要注意每次递归都要在栈区分配空间,当递归层次太深会栈溢出
2.递归三要素
1.递归定义:函数的参数、返回值和函数发挥的作用
2.递归拆解:分析每次递归需要执行的操作,即要找到等价的函数表达式
3.递归出口:要有结束条件,并且每次递推都越来越接近这个条件,避免栈溢出
3.递归举例
题目:求n的阶乘(不考虑溢出)
分析
n的阶乘等于1~n的数累计相乘,即n!=1*2*3*...*n
可以写成n!=1*2*3*...*(n-1)*n
我们可以得出公式n!=n*(n-1)!
假设函数Fact(n)就是求n的阶乘,可以得出最终的递归公式如下:
根据公式可以写出代码:
#include <stdio.h>
//求n!
int Fact(int n)
{
if (n == 1)
{
return 1;
}
else
{
return n * Fact(n - 1);//n!=n*(n-1)!
}
}
int main()
{
int n = 0;
scanf("%d", &n);
printf("%d\n", Fact(n));
return 0;
}
运行代码,输入n的值就能得到n!
当输入5时函数Fact(5)的返回值为5*Fact(5-1),直到最后
Fact(5)==5*Fact(4)==5*4*Fact(3)==5*4*3*Fact(2)==5*4*3*2*Fact(1)==5*4*3*2*1
想要求出Fact(5)就要求出Fact(4),想要知道Fact(4)就要求出Fact(3),直到Fact(1)时返回值为1时递推结束,再进行回归,最后的结果就是5*4*3*2*1*1的值。
欢迎在评论区批评指正
封面图来自百度安全验证