/* 第一个月 只有一只 --->1 第二个月 只有一只 --->1 第三个月 原先的一只生出一只 共2只 第四个月 最开始的一只又生出一只 共3只 第五个月 第一只又生一只,第二只到第三月 生一只,共5只 第六个月 第一只又生一对,第二只生一只,第三只生一只,共8只 可以发现f(n) = f(n-1)+f(n-2) 即斐波那契 */ int f(int n) { if(n == 1 || n == 2){ return 1; } return f(n-1)+f(n-2); } int main() { int n; scanf("%d",&n); int count =0; count=f(n); printf("%d\n",count); }
分析:
第一个月,未满三个月不生 | 1 | 共1只 |
第二个月,未满三个月不生 | 1 | 共1只 |
第三个月,第一只满三个月生一只 | 1+1 | 共2只 |
第四个月,第一只满三个月在生一只 | 1+1+1 | 共3只 |
第五个月,第一只再生一只 但是原第一只生的第一只满三个月了会生一只 | 原1+1+1+1 第一只的第一个孩子 +1 | 共5只 |
第六个月,第一只再生一只 但是原第一只生的第一只在生一只 此时原第一只的第二个兔子也满三个月了会生一只 | 原:1+1+1+1+1 原1:1+1 原2:1 | 共8只 |
.............. | ............... | ........... |
以此类推发现f(n)=f(n-1)+f(n-2)的斐波那契数列 | f(n)=f(n-1)+f(n-2) |
仔细分析不难发现规律