古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月

后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....

这种例子的出发点不是求效率,而是用来介绍递归的,所以还是用递归好点,起码没有违背出题人的初衷

下面有三种方法
#include<stdio.h>
void main()
{
int a[100] ,i,n;
printf("请输入月数:\n");
scanf("%d",&n);
a[0]=a[1]=1;
for(i=2;i<n;i++)
a[i]=a[i-1]+a[i-2];
printf("%d\n",a[n-1]);

}

#include<stdio.h>
void main()
{
long f1,f2;
int i,n,m;
f1=f2=1;
printf("输入月数:\n");
scanf("%d",&n);
for(i=3;i<=n;i++)
{
m=f2;
f2+=f1;
f1=m;
}
printf("%d\n",f2);
}

#include <stdio.h>
int rabbit(int n)
{
if (n<=0)
{
printf("error");
return 0;
}

if(n==1||n==2)
return 1;
if (n>2)
return rabbit(n-1)+rabbit(n-2);
}
void main ()
{
int n;
printf("intput month:\n");
scanf("%d",&n);
n=rabbit(n);
printf("%d\n",n);

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-12
不对 运行一遍 也不对 程序应该是这样的
#include<stdio.h>
void main()
{
int sum=1,i,j,g;/*sum 总对数;i为月数 我是认为3月开始下兔子*/
printf("请输入月数:%d\n",i);
scanf("%d",&i);
g=i/3;

if(i<=2)
sum=1;
else
{ for(j=2;j<i+1;j++)
{
sum=sum+1;
};

if((int)g==g)
sum=(sum+g-2)*2;
};
printf("sum= %d\n",sum);
};
第2个回答  2011-04-28
菲布拉奇数列求和
int a[100] ,i,n;
printf("请输入月数:\n");
scanf("%d",&n);
a[0]=a[1]=1;
for(i=2;i<n;i++)
a[i]=a[i-1]+a[i-2];
printf("%d\n",a[n-1]);

}

#include<stdio.h>
void main()
{
long f1,f2;
int i,n,m;
f1=f2=1;
printf("输入月数:\n");
scanf("%d",&n);
for(i=3;i<=n;i++)
{
m=f2;
f2+=f1;
f1=m;
}
printf("%d\n",f2);
}

#include <stdio.h>
int rabbit(int n)
{
if (n<=0)
{
printf("error");
return 0;
}

if(n==1||n==2)
return 1;
if (n>2)
return rabbit(n-1)+rabbit(n-2);
}
void main ()
{
int n;
printf("intput month:\n");
scanf("%d",&n);
n=rabbit(n);
printf("%d\n",n);
第3个回答  2011-04-28
菲布拉奇数列求和
相似回答