问题:
古典问题:有一对兔子,从出生后3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,加入兔子都不死,问每个月的兔子总数是多少?
分析:
1,兔子的规律:1,1,2,3,5,8,13,21...
2,第一个月和第二个月的都是1,后面的每个月的兔子数都符合前一个月的加再前一个月的
3,可以使用递归来做,时间复杂度是O()
4,可以采用循环来做,时间复杂度是O(n)
代码1:O(n),循环来做
main(){
int i,f1=1,f2=1;
for(i=0;i<10;i++){
printf("%d %d ",f1,f2);
f1=f1+f2;
f2=f1+f2;
}
}
结果:
代码2:递归
int f(int n){
if(n==1||n==2){
return 1;
}else{
return f(n-1)+f(n-2);
}
}
main(){
for(i=1;i<21;i++){
printf("%d ",f(i));
}
}
结果: