猿问

请问下那个递归的方法我看不明白呀...怎么求的母牛数???

一母牛从出生起第4个年头开始每年生一母牛..问第n年有多少母牛??
long num_cow(int n)
{ int i;
long sum=1;
for(i=4;i<n;i++)sum+=num_cow(n-i);
return sum;}
for(i=4;i<n;i++)sum+=num_cow(n-i);这怎么做的...我看不懂...哪位高人能够提供详细的解释么...

蝴蝶不菲
浏览 122回答 2
2回答

杨魅力

重新看了一下,算法有问题,牛的问题如下:(设小牛是刚刚生下来的牛,老牛是年龄大于4个月可以生小牛的牛)1月:小牛:1;老牛:0;总数:1(小牛成长中)2月:小牛:1;老牛:0;总数:1(小牛成长中)3月:小牛:1;老牛:0;总数:1(小牛成长中)4月:小牛:1;老牛:1;总数:2(小牛长成老牛,并生下小牛)5月:小牛:2;老牛:1;总数:3(小牛成长中,本月的老牛又生下小牛)6月:小牛:3;老牛:1;总数:4(小牛成长中,本月的老牛又生下小牛)7月:小牛:4;老牛:2;总数:6(4月的小牛长成,本月的老牛又生下小牛)……你的程序得到的结果不是这个而是:1,1,1,1,2,3,4,5,7,10……的规律。其实这个数列和Fibonacci数列差不多,Fibonacci数列的问题是有一只兔子,到第三个月以后就会每月生下小兔子(比生牛要可爱),然后求得每月的总兔子数。根据你的问题可以得到以下牛总数的规律:n<=3时 sum(n)=1n>3时 sum(n)=sum(n-1)+sum(n-3)(这个规律的得出是有道理的,在这里就不说明了)所以程序如下:===============================#include <stdio.h>int main(){long sum(int);int n;scanf("%d",&n);printf("the sum of month %d is %ld",n,sum(n));scanf("%d");}long sum(int n){if(n<=3)return(1);elsereturn(sum(n-1)+sum(n-3));}//本程序在dev-cpp下调试通过

蓝山帝景

for(i=4;i<n;i++){sum = sum + num_cow(n-i);}看懂了吗
随时随地看视频慕课网APP
我要回答