目录
1、什么是递归?
首先我们来将一个有趣的现象:
问:一个人前面有一个镜子,后面有一个镜子。问他可以再镜子中看到几个像?
答:你会在你眼前的镜子的反光里看见你背后的镜子,然后从这个你眼前的镜子的反光里背后的镜子的反光里看见你眼前的镜子,从这个眼前从这个你眼前的镜子的反光里背后的镜子的反光里的你眼前的镜子的反光里看见你背后的镜子,从这个眼前从这个你眼前的镜子的反光里背后的镜子的反光里的你眼前的镜子的反光里的你背后的镜子的反光里看见你眼前的镜子……………………无限循环下去,你将会看见无数个镜子。
这样的现象从理论上来讲是可以实现的.
由此我们可以得出递归就是自己嵌套着自己,循环下去,当然递归不可能一直循环下去,所以
递归的定义:
#indlude <stdio.h>
void dg(){
//递归终止条件
if(){
}
//递归操作
void();
}
2、三个有关递归有趣的问题
1、问1+2+3+......+99+100=?
这个问题我们可以用递归的思想去实现
//1+2+3+...+100
int sum(int n){
//递归条件
if(n==1){
return 1;
}
//递归操作
return n+sum(n-1);
}
int main(){
sum(100):
return 0;
}
2、问猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?
应用递归的思想
int eat_peach(int n){
//递归条件
if(n==1){
return 1;
}
//递归操作
return (eat_peach(n-1)+1)*2;//(eat_peach(n-1)为前一天的桃子总数
}
int main(){
eat_peach(10);
return;
}
3、斐波那契问题
1+1+2+3+5+8+......
F(x)=F(x-1)+F(x-2)
//求fit
int fib(int n){
//递归条件
if(n==1 || n==2){
return 1;
}
//递归操作
return fib(n-1)+fib(n-2);//后面的数等于面两个数之和
}
int main(){
int m;
scanf("%d",&m);
return;
}