题目链接: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;
}