C语言设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛 求解释

#include<stdio.h>
int main()
{int N;
int fac(int n);
while(1)
{scanf("%d",&N);
if(N==0) break;
else printf("%d",fac(N));
printf("\n");
}
return 0;
}

int fac(int n)
{ int static cow;
if(n==1||n==2||n==3) cow=1;
else if(n==4) cow=2;
else cow=fac(n-1)+fac(n-3);
return cow;
}
为什么递归是 cow=fac(n-1)+fac(n-3);

递归主要看的是每个步骤之间的关联,fac(n)代表第N年的头数,那么fac(n-1)就必然是N-1年时的头数,现在只需加上此年的增长量即可,但是因为年龄为1、2、3的牛都不会繁殖,而且每头牛一次生一头,所以他只要加上三年前的牛的数量即可(因为只有三年前的牛在此年才能生育),如果每年生两头就要加上2fac(n-3)了。你可能在n-3的地方会迷茫,其实你在本子上算算就知道了,在n-3年使得牛就已经催在(也就是有年龄了且至少一岁),那么三年后就能生育了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-04
n-1说的是去年一共有多少头,然后n-3说的是3年前有多少头(也就是说性成熟可生育的母牛数量),那么去年的牛数加上可生育的牛数量(也就是今年新产的小牛数量)就是今年牛数量
举个例子,第5年就是第四年的牛数量加上第2年的牛数量(第二年的牛已经全部可以生育了)
相似回答