(遞推1)兔子繁殖問題

2021-08-20 18:16:57 字數 1246 閱讀 4782

有一對小兔子,小兔子過z個月長大,一對大兔子x個月生y對小兔子,求n個月後的兔子總對數。

當xyz都是1的時候,f(n)=f(n-1)+f(n-2)

問題一:

有一對小兔子,小兔子過5個月長大,一對大兔子3個月生4對小兔子,求n個月後的兔子總對數。

f(n)表示n個月後的兔子總數

f(n)=n那個月原有的兔子+n那個月新生的兔子

n那個月原有的兔子是:f(n-1)

n那個月新生的兔子是:n-x那個月成熟的兔子,也就是n-x-z那個月所有的兔子,因為n-x-z那個月所有的兔子在n-x那個月的時候都成熟了

故f(n)= f(n-1)+ f(n-x-z) * (y/x);這裡必須是* (y/x),這是每個月生產的。(那個月成熟的兔子在乙個月裡生的小兔子的個數)

這個表示式也適合於乙個月生一對的情況;

乙個月的情況可以看成成熟+不成熟,和原來的+新生的。而多個月的情況看成後一種比較好,因為看成前一種會超級麻煩。

到本題,也就是f(n)= f(n-1)+ f(n-8)*(4/3);

問題二:

有一對小兔子,小兔子過5個月長大,一對大兔子3個月生4對小兔子,求n個月後的大兔子總對數。

用f(n)表示大兔子,那麼

f(n)= 上個月的大兔子數+這個月新長成的大兔子數

上個月的大兔子數是:f(n-1)

這個月新長成的大兔子數是:因為兔子需要5個月長大,所以應該是n-5個月那個月的新出生的兔子,

n-5個月那個月的新出生的兔子是n-5-3那個月的所有大兔子數,因為大兔子經過三個月才能有小兔子,

故f(n)=f(n-1)+f(n-5-3)*(4/3);

#include 

using

namespace

std;

//前八個月的兔子總對數都是一對,inittotalrabbit[1]表示第乙個月

double inittotalrabbit[9]=;

double calctotalrabbit(int n)

//前五個月的大兔子數目為0,initbigrabbit[1]表示第乙個月的大兔子數目

double initbigrabbit[9]=;

double calcbigrabbit(int n)

int main()

return

0;}

兔子繁殖問題

問題 有一對小兔子,從出生後第3個月起每個月都生一對兔子。小兔子長到第3個月後每個月又生一對兔子。按此規律,假設沒有兔子死亡,第乙個月有一對剛出生的小兔子,問第n個月有多少對兔子?分析 這個月的兔子只有兩個 乙個 是上個月的老兔子活到了這個月,另乙個 是這個月剛出生的兔子,而這個月剛出生的兔子,個數...

遞推1 兔子問題

推出部分例項 仔細分析遞推公式,遞推公式如果印合例項,那就對了 有了遞推公式,程式設計很簡單。當xyz都是1的時候,f n f n 1 f n 2 仔細分析,想清楚了就好,想清楚了,就簡單了 1 2 有一對小兔子,小兔子過z個月長大,一對大兔子x個月生y對小兔子,求n個月後的兔子總對數。34 問題一...

經典演算法 兔子繁殖問題

有一種動物,它出生後兩天後就開始以每天乙隻得速度繁殖,假設有一天,有乙隻這樣的動物 該動物剛出生,從第三天開始繁殖後代 到第11天,共有多少只?有乙個非常明智的思考,思考過程如下 我們思考第n天的兔子是如何來的,首先第n 1天的兔子都會存活到第n天,並且不會繁殖 第n 2天的兔子都會在第n天繁殖,所...