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数列的问题是有一只兔子,到第三个月以后就会每月生下小兔子(比生牛要可爱),然后求得每月的总兔子数。
根据你的问题可以得到以下牛总数的规律:
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 关注
- 121 浏览
添加回答
举报