2 回答

TA貢獻1811條經驗 獲得超6個贊
重新看了一下,算法有問題,牛的問題如下:(設小牛是剛剛生下來的牛,老牛是年齡大于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數列的問題是有一只兔子,到第三個月以后就會每月生下小兔子(比生牛要可愛),然后求得每月的總兔子數。
根據你的問題可以得到以下??倲档囊幝桑?br/>n<=3時 sum(n)=1
n>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);
else
return(sum(n-1)+sum(n-3));
}
//本程序在dev-cpp下調試通過
- 2 回答
- 0 關注
- 138 瀏覽
添加回答
舉報