題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2018
題意是牛分爲母牛和小母牛,目標是求出每年的總母牛數(母牛+小母牛)。
分析:
由輸入輸出樣例來看,第1年只有一頭母牛,並且沒有生下牛,第二年年初生下一頭牛。
由遞推關係看,第n年的母牛數f(n)由兩部分組成:
1.原有母牛的數量:由於沒有死亡,去年是母牛(包含了所有小母牛,就算今年成年,也包括在內),今年仍然是母牛,則第n-1年的母牛數爲f(n-1).
2.今年新出生母牛的數量:今年出生的母牛一定是由之前是母牛和剛剛今年成年的母牛生下的,那麼數量爲f(n-3)
所以f(n)=f(n-1)+f(n-3)
解決:
因此得到完整遞推公式:f(1)=f(2)=f(3)=n(0
拓展:
question:如果要得到第n年的小母牛數量,應該怎麼做?
代碼:
#include <stdio.h>
// 遞推式 f(n) = n n<=4,f(n) = f(n-1) + f(n-3) n>4
int cow(int n)
{
if(n <= 4)
return n;
else
return cow(n-1) + cow(n-3);
}
int main(void)
{
int n;
while(scanf("%d", &n) != EOF) {
// 判定結束條件
if(n == 0)
break;
// 計算並輸出結果
printf("%d\n", cow(n));
}
return 0;
}