有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?
这个问题可能我比较笨,看大多数解释都是一句话,f(n) = f(n-1) + f(n-2),但是总有点想不明白这个。列了个表格才看清楚咋回事。

月份1234567
兔子总数11235813
具有生育能力兔子0011235

如果这个月是第n个月,那要求这个月兔子的总数,其实就是上个月的兔子总数加上新生出来的兔子。也就是f(n) = f(n-1) + x。这个x是比较难理解的地方。那这个月到底新生出来多少兔子呢?这就是求这个月已经有生育能力的兔子是多少,上上个月所有的兔子就是这个月所有的有生育能力的兔子,这里可以结合表格推一推就很好理解了。所以x就是f(n-2)。
因此可以得到递推f(n) = f(n-1) + f(n-2)。
其实比较简单的问题,不过自己光凭笨脑子想,突然没想明白,记一下这个思考过程。
还有就是牛客网上的高赞答案详解:
链接:https://www.nowcoder.com/questionTerminal/1221ec77125d4370833fd3ad5ba72395?f=discussion
来源:牛客网
#include
usingnamespacestd;
intmain(){
int m;
while(cin>>m){
int a=1,b=0,c=0;//a:一个月兔子数,b:两个月兔子数,c:三个月兔子个数
while(--m){//每过一个月兔子数变化
c+=b;
b=a;
a=c;
}
cout