1. 题目要求
把一对新生的兔子关在屋子里,已知一对两个月大的兔子以后买一个月可以生一对小兔子,而这一对心生的小兔子初生两个月以后才可以生小兔子,假如一年内没有死亡,一年可以繁殖成多少对?
2. 题目分析
感觉很复杂啊,还是先不去看答案,一般这种问题,我的解决思路都是先老老实实地写前面几个月的,然后找规律
第一个月 1
第二个月 1
第三个月 1+1 2
第四个月 1+1+1 3
第五个月 1+1+1+1+1 5
发现这个归纳能力还是很缺乏呢!看了参考答案以后也知道这是斐波拉契数列
哎~
3. 代码尝试
#include "stdio.h"
int F(int n){
if(n == 1 || n == 2){
return 1;
}else{
return F(n-1)+F(n-2);
}
}
int main(){
int sum=0,i;
for(i=1;i<=12;i++){
sum = sum + F(i);
}
printf("the answer is %d\n",sum);
return 0;
}
但为什么会不对呢?
【犯错原因】为了题目的要求,多次体现累加!但其实F(n-1)+F(n-2)就已经体现了累加的思想了
#include "stdio.h"
int F(int n){
if(n == 1 || n == 2){
return 1;
}else{
return F(n-1)+F(n-2);
}
}
int main(){
printf("the answer is %d\n",F(12));
return 0;
}
4. 思考
有时候会把事情想复杂,然后出现不必要的“冗余”这其实是非常没有必要的。一定要逻辑清楚呢!