题干:
思路:
首先这个题n小于55,数据真的小,普通的递归可以解决
不妨把牛分为四个等级:
f1:小牛一级
f2:小牛二级
f3:小牛三级
f4:成年母牛
设F(N)表示第N年牛的数量, fx(N)表示第N年三级小牛的数量
(1)那么显然,F(N) = F(N - 1) + f4(N - 1) + f3(N - 1) ,这是因为f3牛下一年就要生产了,所以增加数量是原本有的f4加上f3的数量
(2)
-
f4(N - 1)是上一年的f4牛 + 上一年f3牛,也就是f4(N - 1) = f4(N - 2) + f3(N - 2)
-
f3(N - 1)牛是由上一年f2牛进化而来,也就是f3(N - 1) = f2(N - 2)
综合上面两个以及(1),得到:F(N) = F(N - 1) + f4(N - 2) + f3(N - 2) + f2(N - 2)
(3)再根据上述进化理论推导一次
-
f4(N - 2) = f4(N - 3) + f3(N - 3)
-
f3(N - 2) = f2(N - 3)
-
f2(N - 2) = f1(N - 3)
综合上面,得到:F(N) = F(N - 1) + f4(N - 3) + f3(N - 3) + f2(N - 3) + f1(N - 3)
而又某一年的牛首先等于各等级牛数量的和!!
于是:F(N) = F(N - 1) + F(N - 3)
推导完毕
————————————————————————————————————————————————
代码1:根据子结构,直接递归就行
def cow(n):
print(n)
if n <= 3:
return n
return cow(n - 1) + cow(n - 3)
while True:
d = int(input())