学习目标:
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; }
这个代码比递归更为有效,并且容易想到。