直接开始反思。
最近有点时间,又看了看迭代,感觉这个一直一知半解,没有认真思考过原理,没有自己的理解。
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少对?
现在就来说说什么才是最重要的,我认为不是问题的答案,最重要的是思考,思考我如何去解决这个问题。
以下是解题想法:
1月:1(最开始1)
2月:1(最开始1)
3月:1(上月1)+1(新出生1)
4月:2(上月2)+1(新出生1)
5月:3(上月3)+2(新出生2)
6月:5(上月5)+3(新出生3)
兔子总数=原有的+新生的,
那么原有的是多少呢,假设第x月,函数f(x)代表第x月兔子数量,那么原有的就是上个月兔子数量,也就是f(x-1),
那么新出生的是多少呢,题目一分析就知道两个月之前有多少对兔子新出生的就是多少,也就是f(x-2)。
那么函数f(x)就知道怎么写了
int f(x)//x是月份
{
if(x < 0)
{
return 0;
}
else if(x==1 || x==2)
{
return 1;
}
else
{
return f(x-1)+f(x-2);
}
}
反思:当年刚毕业那会其实对迭代不是很明白,也没有静下心来再去思考。
现在再拿过来思考,其实很简单,如果题目换一下,根据思路很快也就能得出结果。
但是这种解决问题的思考方式反而很重要。