这个递归理解起来有点困难,我尝试说下我的理解,刚开始我没读懂题意,老是纠结3个月后生兔子这里,想去考虑3月怎么生,这里只需要理解成1月一个三月就变成两个了,好了现在可以给兔子分种类了,一个月的是小兔子,二个月的是中兔子,三个月的是大兔子
我们尝试着从n个月开始能不能推出n+2个月的兔子;我们假设n个月的兔子从小到大分别有{a,b,c},可以推出n+1个月有小中大依次为{b+c,a,b+c},n+2个月是{a+b+c,b+c,a+b+c},可以看到他的规律就是斐波那契了,我记得很早以前就说兔子繁殖的数量就是斐波那契,好像还有某些植物的叶子等哈哈,所以直接递归就好了。
#include <algorithm>
using namespace std;
int count(int n){
if(n==1||n==2)
return 1;
else return (count(n-1)+count(n-2));
}
int main() {
int N;
while(cin>>N){
N=count(N);
cout<<N;
}
}