C语言编程:兔子繁殖问题

2024-11-29 03:57:50
推荐回答(4个)
回答1:

思路不要乱。这个月的兔子只有两个来源,一个来源是上个月的老兔子,另一个来源是这个月刚出生的兔子,而这个月刚出生的兔子,就是两个月前的所有兔子,因为两个月前的所有兔子,无论两个月前就是老的,还是两个月前刚生的,到了这个月就全部具有生育能力,每只都可以下一对儿,所以可以得到一个递推关系f(n) = f(n - 1) + f(n - 2)。那么程序自然是

long fun(int month)
{
    if(month == 1 || month == 2)
        return 1;
    else
        return fun(month - 1) + fun(month -2);
}
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
int main()

    int Mon;
    long Num;
    scanf("%d",&Mon);
    Num = fun(Mon);
    printf("第%d月共有兔子%ld只\n",Mon,Num); 
    return 0; 
}

 至于你的程序,很难把它改正确,因为这题压根不是那个思路,那样想会越想越乱的

回答2:

#include
#include
#include
#define M 13
int main()
{
    int i;
    long a[M]={1,1};
    for(i=2;i    {
       a[i]=a[i-1]+a[i-2];
    
    }
    for(i=0;i    {
      printf("%d月兔子总数:%d\n",i,a[i]);
    
    }
    getch();
    return 0;



}

回答3:

这个题就是一个斐波那契数列
1,1,2,3,5,8,13,21,34
每个数等于前两个数之和
用循环和递归都能写
int fun(int month) {//递归函数
if(month==1||month==2) return 1;
else return fun(month-1)+fun(month-2);
}
---------------------------------------------------

int arr[100]={1,1};
int fei(int num) {//优化后的递归
if(num==1||num==2) return 1;
else {
int ret=0;
if(arr[num-2])
ret=arr[num-2];
else
{ arr[num-2]=fei(num-2);ret=arr[num-2];}
if(arr[num-1])
ret+=arr[num-1];
else
{arr[num-1]=fei(num-1); ret+=arr[num-1];}
return ret;
}
}

回答4:

斐波那契数列。