学习目标:
1.什么是递归
2.限制条件
3.递归与迭代
什么是递归
在C语言中,递归就是函数自己调用自己
如:
#include<stdio.h>
int main()
{
printf("hehe\n");
main();
return 0;
}
这个代码是死循环的,只是为了更加了解一些。
递归就是把一个大的问题转化成相似问题,直到这个小问题不能再拆分。
递归的限制条件
举例:求n的阶乘
n!=n*(n-1)!
(n-1)!=(n-1)*(n-2)!
....
直到n=1或者0的时候,不再拆分
代码实现:
#include<stdio.h>
int fit(int n)
{
if (n <= 0)
return 1;
else
return n * fit(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = fit(n);
printf("%d", ret);
return 0;
}
递归可以理解成递推回归,先递推完,然后返回回归。
递归与迭代(循坏)
在C语言中,有时候递归会被误用,就比如上面这个代码,当输入的n的值很大的时候,就会导致溢出,导致运行不下去。
如果采用迭代的话,代码如下
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int i = 0;
int sum = 1;
for (i = 1; i <= n; i++)
{
sum = sum * i;
printf("%d\n", sum);
}
return 0;
}
这个代码比递归更为有效,并且容易想到。