- 函数直接或间接调用自身
- 每次调用必须获得一些进展,进一步靠近目标
- 达到目标就不再调用自身
- 阅读递归函数不要纠缠于执行过程,而是相信递归函数会顺利完成任务
例:阶乘
0! =1(0 的阶乘定为1)
1! =1
2! =2*1=2
3! =3*2*1=6
n! = n × (n-1) ×…× 2 × 1
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
不用递归
main() {
int ret;
int i,j;
for(i=0; i<=10; i++) {
ret = 1;
for(j = i; j>1; j--) {
ret = ret *j;
}
printf("%d! = %d\n",i, ret);
}
}
使用递归
#include <stdio.h>
int factorial(int n) {
if(n == 0) {
return 1;
}
int ret = n*factorial(n-1);
return ret;
}
main() {
int i;
for(i = 0; i<=10; i++) {
int ret = factorial(i);
printf("%d! = %d\n",i, ret);
}
}
练习:斐波那契数列