c语言通常是在栈中分配自动变量的内存区域。这除了可以重复使用该区域来节约内存空间,还可以实现递归调用。
递归的调用就是函数对自己的调用。
递归函数是指一个函数的函数体中直接或间接的调用了该函数本身。
递归函数调用的执行过程分为两个阶段:
- 递归阶段:从原问题出发,按递归公式递推,从未知到已知,最终达到递归终止条件。
- 回归阶段:按递归终止条件求出结果,逆向逐步带入递归公式,回归到原问题求解。
问题一:简单运用递归实现n的阶层
int qjc(int);
int main(int argc, char * argv[]) {
int n;
int s;
printf(“请输入一个整数:”);
scanf("%d",&n);
s=qjc(n);
printf(“该数的阶层为:%d”,s);
return 0;
}
int qjc(int n){
if(n== 0||n==1){
return 1;
}else{
int a= n*qjc(n-1);
return a;
}
}
问题二:斐波那契数列问题;
兔子出生问题:兔子在出生两个月后就有繁殖能力,每个兔子在一个月能生出一对小兔子。如果兔子不死的话,一年内能繁殖多少兔子?
思考:
- 一月:1;
- 二月:1;
- 三月:1+1;
- 四月:1+1+1;(二月的兔子*2+三月减二月的;)
- 五月:5;(三月的*2+四月减三月的;)
- 六月:…同理;
设当前的月份为n,所以函数的函数体为fsn;函数的返回体因该是fsn(n-2)*2+fsn(n-1)-fsn(n-2);
编程代码如下:
int fsc(int);
int main(int argc, char *argv[]) {
int n;
int s;
printf(“请输入月份:”);
scanf("%d",&n);
s=fsc(n);
printf("%d月后所有的兔子总数为:%d",n,s);
return 0;
}
int fsc(int n){
if(n== 1||n==2){
return 1;
}else{
int a;
a=fsc(n-2)*2+fsc(n-1)-fsc(n-2);
return a;
}
}
开心 开心!