目录
一、递归
递归是学习C语言函数绕不开的⼀个话题,那什么是递归呢?递归其实是⼀种解决问题的方法,在C语言中,递归就是函数自己调用自己。
写⼀个史上最简单的C语言递归代码:
#include <stdio.h>
int main()
{
printf("hehe\n");
main();//main函数中⼜调⽤了main函数
return 0;
}
上述就是一个简单的递归程序,只不过上面的递归只是为了演示递归的基本形式,不是为了解决问题,代码最终也会陷入死递归,导致栈溢出。
1.1 递归的思想
把一个大型复杂问题层层转化为一个与原问题相似,但规模较小的子问题来求解,直到子问题不能再被拆分,递归就结束了,所以递归的思考方式就是把大事化小的过程。
递归中的递就是递推的意思,归就是回归的意思,接下来慢慢来体会。
1.2 递归的限制
递归在书写的时候,有2个必要条件:
• 递归存在限制条件,当满足这个限制条件的时候,递归便不再继续。
• 每次递归调用之后越来越接近这个限制条件。
二、递归举例
2.1 举例1:求n的阶乘
一个正整数的阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。
自然数n的阶乘写作n!。
题目:计算n的阶乘(不考虑溢出),n的阶乘就是1~n的数字累积相乘。
我们知道n的阶乘的公式:n! = n ∗ (n − 1)!
举例:
5! = 5*4*3*2*1
4! = 4*3*2*1
所以:5! = 5*4!
这样的思路就是把⼀个较大的问题,转换为⼀个与原问题相似,但规模较小的问题来求解的。
当 n==0 的时候,n的阶乘是1,其余n的阶乘都是可以通过公式计算。
n的阶乘的递归公式如下: