當前位置:首頁 » 編程語言 » c語言遞歸求兔子生兔子
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言遞歸求兔子生兔子

發布時間: 2022-08-18 09:18:32

c語言遞歸的方法:有一對兔子,從出生後第3個月起每個月都生一對兔子的問題

可以考慮遞歸演算法:

int Amount(int day)
{
if (day==10)
{
return 1;
}
else
{
return 2*(Amount(day-1)+1);
}
}

早說嘛。。。害的白寫了個。。

這題可以多用幾個遞歸函數解決,在這里我稱不能生育的兔子為小兔,能生育的為大兔

int littleR(int month)
{
if (month==1)
return 0;
else
return bigR(month-1)+little(month-1);
}
int bigR(int month)
{
if (month==1)
{
return 1;
}
else if (month==2)
{
return 1;
}
else if (month==3)
{
return 1;
}
else
{
return bigR(month-1)+little(month-2);
}
}
int totalR(int month)
{
return littleR(month)+bigR(month);
}

註:這種增長速度的話很快兔子的數量就會增長到很大,所以如果month達到幾十的話就會超過int范圍,所以可以考慮用__int64代替int,另外到時候如果依然每次都遞歸的話運行速度也會變慢,可能要好幾秒,好幾分鍾,甚至更長的時間才能算出結果,所以可以考慮用數組存每個遞歸函數算出的值,如:
littleR(int month)中else可寫成
if (...)
{
...
}
else
{
if (a[month]!=0)
return month;
else
return a[month]=bigR(month-1)+little(month-1);
}
用這種方法可以適當提高運行速度。。。

㈡ 一道數學題如何通過C語言的遞歸函數實現,求大佬指點迷津

此題邏輯還是有一點復雜的,分析、實現代碼及輸出 見下圖

㈢ c語言100道題中,兔子生兔子程序怎麼理解

有一對兔子,從出生後第 3 個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?

兔子的規律為數列:

1,1,2,3,5,8,13,21....


下面使用了迭代、遞歸和數組三種解法。

【代碼一】使用迭代:

#include<stdio.h>
intmain()
{
longf1=1,f2=1;//兔子的數量
inti;//循環次數
intn;//要計算的月份

printf("輸入要計算的月數:");
scanf("%d",&n);

//計算出循環次數
if(n%2==1){
n=(n+1)/2;
}else{
n=n/2;
}

for(i=1;i<=n;i++){
printf("第%d個月有%d只 ",i*2-1,f1);
printf("第%d個月有%d只 ",i*2,f2);

f1=f1+f2;/*前兩個月加起來賦值給第三個月*/
f2=f1+f2;/*前兩個月加起來賦值給第三個月*/
}
return0;
}

運行結果:

輸入要計算的月數:10
第1個月有1隻
第2個月有1隻
第3個月有2隻
第4個月有3隻
第5個月有5隻
第6個月有8隻
第7個月有13隻
第8個月有21隻
第9個月有34隻
第10個月有55隻

【方法二】使用遞歸:

#include<stdio.h>
intFeibonacci(intn){
if(n==1||n==2)
return1;
else
returnFeibonacci(n-1)+Feibonacci(n-2);
}
intmain(){
intn;//要計算的月份

printf("輸入要計算的月數:");
scanf("%d",&n);

printf("%d個月的兔子總數為%d ",n,Feibonacci(n));

return0;
}


運行結果:

輸入要計算的月數:10
10個月的兔子總數為55


遞歸看上去非常符合邏輯,但是這種遞歸效率是非常慢的,不信你計算20, 30, 40 個月的兔子數試試,明顯比另外兩種方法慢多了,具體分析請看:C語言用遞歸求斐波那契數,讓你發現遞歸的缺陷和效率瓶頸

【代碼三】使用數組

#include<stdio.h>
voidmain()
{
inta[100],i,n;

printf("請輸入月數:");
scanf("%d",&n);

a[0]=a[1]=1;
for(i=2;i<n;i++)
a[i]=a[i-1]+a[i-2];

printf("第%d個月的兔子為:%d ",n,a[n-1]);
}

運行結果:

請輸入月數:10
第10個月的兔子為:55

㈣ c語言題老師留的 兔子繁殖問題,用遞歸函數的方法做。 個位大神編一個然後寫下答案

斐波那契額數列 問題

#include<stdio.h>

intfib(intn)
{
if(n==1||n==2)
{
return1;
}
returnfib(n-1)+fib(n-2);
}

intmain(void)
{
printf("%d ",fib(3));
return0;
}

㈤ c語言數組 兔子繁殖

double a[100];
printf("第%d個月的兔子為:%0.2f\n", n, a[n-1]);
改一下

㈥ C語言編程:兔子繁殖問題

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#defineM13
intmain()
{
inti;
longa[M]={1,1};
for(i=2;i<M;i++)
{
a[i]=a[i-1]+a[i-2];

}
for(i=0;i<M;i++)
{
printf("%d月兔子總數:%d ",i,a[i]);

}
getch();
return0;}

㈦ C語言編程題目 兔子繁衍問題

方法一、用遞歸。

方法二、把兔子定義成結構,每個兔子自帶計時器變數,繁殖就是新建節點,構建結構鏈表。每次循環遍歷所有節點的計時變數大於3的就新建一個節點插入鏈表。最後統計節點數量。

我用方法1來寫:

#include <stdio.h>

int childbirth(int bMth,int gMth)//bMth:調用時傳0,gMth:經過的最大月數


{


int cnt=0,n=bMth,num=2;


while(n++<gMth+1)


if(cnt++>2)


num=num+childbirth(n,gMth+1);


return num;


}

int main()


{


int i,n;


printf("請輸入經過多少月:"),scanf("%d",&n);


for(i=1;i<=n;i++)


printf("經過%d個月後:兔子數量為:%d ",i,childbirth(0,i));


return 0;


}

㈧ C語言遞歸N個月兔子

#include<stdio.h>
intdigui(intn);
intmain(void)
{
intn=0;
scanf("%d",&n);
printf("%d ",digui(n));
return0;
}
intdigui(intn)
{
returnn>1?digui(n-1)+digui(n-2):1;
}

㈨ c語言題老師留的 兔子繁殖問題,用遞歸函數的方法做。 個位大神編一個然後寫下答案請寫上兔子多少只

//兔子的對數,就是Fibonacci數列

//1 1 2 3 5 8 13 21 34 55 89 ...

#include<stdio.h>
intf(intn)
{
if(n<3)
return1;
else
returnf(n-2)+f(n-1);
}
voidmain()
{
intn;
scanf("%d",&n);
printf("%d年後,有兔子%d只. ",n,f(n));
}