关于母牛生牛的问题描述如下:
若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第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));
- }
- }