[zz]母牛生牛问题解析
http://blog.csdn.net/lirincy/archive/2008/09/17/2944195.aspx
若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年有多少头母牛?
由于这道题出现
在钱能的C++书籍当中,因此关于这道题的讨论有很多:
http://topic.csdn.net/t/20031207/17/2537255.html
http://ks.cn.yahoo.com/question/1407041505424.html
但是很多论述和解答都不太正确,我综合了一下各方的方案,经过推导,给出如下解答:
对于母牛的数量,有如下数量关系:
时间(年) 1岁牛(头) 2岁牛(头) 3岁牛(头) 4岁以及以上(头) 母牛总数(头)
1
1 0 0
0 1
2
0 1 0
0 1
3
0 0 1
0 1
4
1 0
0 1 2
5
1 1
0 1 3
6
1 1
1 1 4
7
2 1
1 2 6
8
3 2 1
3 9
9
4 3
2 4 13
10
6 4
3 6 19
设
第N年的年龄为1的母牛为T1(N)只,依次,年龄为2、3以及4或以上的牛的个数分别为T2(N)、T3(N)、T4(N).
对于T(N+1), 有如下关系(具体逻辑很容易推导,请自行完成):
T1(N+1)=T3(N)+T4(N);
T2(N+1)=T1(N);
T3(N+1)=T2(N);
T4(N+1)=T3(N)+T4(N);
设F(N) 代表第N天的母牛,则有:
F(N) = T1(N)+T2(N)+T3(N)+T4(N)
= T3(N-1)+T4(N-1)+T1(N-1)+T2(N-1)+T3(N-1)+T4(N-1)
= F(N-1) + T3(N-1)+T4(N-1)
= F(N-1) + T2(N-2)+T3(N-2)+T4(N-2)
= F(N-1) + T1(N-3)+T2(N-3)+T3(N-3)+T4(N-3)
= F(N-1) + F(N-3)
因此,如下的递归解法是正确的:
- int GetCount(int age)
- {
- if(age==0)
- {
- return 0;
- }
- else
- {
- if(age<4)
- {
- return 1;
- }
- return (GetCount(age-1)+GetCount(age-3));
- }
- }