1. 程式人生 > >斐波那契數列兔子繁殖問題相關思考

斐波那契數列兔子繁殖問題相關思考

斐波那契數列的一個典型應用就是兔子繁殖問題。

 

一.最樸素的兔子繁殖問題就是:有一隻兔子,從出生後第3個月起每個月都生一隻兔子,小兔子長到第三個月後每個月又生一隻兔子,假如兔子都不死,問第n個月的兔子總數為多少?

    這個問題就是斐波那契數列的直接應用。設f【n】表示第n個月所有的兔子總數。f【1】=1,f【2】=1,f【n】=f【n-1】+f【n-2】.感覺書上講的並不直觀,個人理解如下:第n個月的兔子總數來源於兩個方面,一是第n-1個月原來就有的兔子總數,即f【n-1】,二是新出生的兔子總數。由於新出生的兔子在出生的那一月的下一個月的再下一個月開始每個月生新兔子,我們可以假設兔子分為小兔子,中兔子和大兔子,小兔子過一月變為中兔子,中兔子過一月變為大兔子,大兔子每個月生小兔子。我們要算第n個月所有的新出生的小兔子的個數,也就是第n月所有的大兔子總數,這個個數等於第n-1個月所有中兔子和大兔子的總數(因為第n-1個月的中和大兔子第n個月長成了大兔子,第n個月的小兔子完全來源

於第n-1個月的中和大兔子),同理,第n-1月所有的中和大兔子又完全來源於第n-2月所有的小,中和大兔子,即第n-2月的所有兔子,即f【n-2】。故f【n】=f【n-1】+f【n-2】.仔細理解這個完全來源,這是遞推的核心。按照這個思路,自己按照需要設好前兩項,不必要必須第一個月是一個小兔子,什麼都可以,只要設好前兩項,按照這個思路遞推就可以了。

 

下面來看一個變式----母牛的故事(hdu2018)

有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。請程式設計實現在第n年的時候,共有多少頭母牛?

這道題思路和上一道完全一樣,只是遞推式不一樣了。考慮第n月所有母牛個數,分為兩部分:一是上一月已有的所有母牛,即f【n-1】,二是第n月新出生的母牛。假設母牛有1,2,3,4......歲,每月加一歲,4歲開始可以生小母牛(教官教的歇後語:小母牛對屁股--比較牛逼  和  小母牛坐火箭--牛逼沖天

),第n月新出生的母牛為1歲母牛,個數等於第n月4歲及以上母牛總數,數目等於第n-1月3歲及以上的母牛,等於n-2月2歲及以上的母牛,等於n-3月1歲即以上的母牛,即n-3月所有母牛f【n-3】.故f【n】=f【n-1】+f【n-3】,只要按需設定好前3項即可。

 

還有一種是關於兔子可以死亡的問題,後續再更。

https://blog.csdn.net/wangrui1605/article/details/81001340

https://nanti.jisuanke.com/t/16442