【ROSALIND】【練Python,學(xué)生信】04 斐波那契數(shù)列與兔子繁殖問題

如果第一次閱讀本系列文檔請(qǐng)先移步閱讀【ROSALIND】【練Python,學(xué)生信】00 寫在前面 ?謝謝配合~

題目:
根據(jù)斐波那契數(shù)列計(jì)算兔子的繁殖情況
Given: Positive integers n<40and k<5.
所給:正整數(shù)n和k,n<40,k<5。
Return: The total number of rabbit pairs that will be present after n months, if we begin with 1 pair and in each generation, every pair of reproduction-age rabbits produces a litter of k rabbit pairs (instead of only 1 pair).
需得:經(jīng)過n個(gè)月后共有多少對(duì)兔子,第一個(gè)月有1對(duì)兔子,每對(duì)成年兔子每個(gè)月可以生k對(duì)小兔子(而不是我們熟悉的斐波那契數(shù)列假設(shè)的每月生一對(duì))。
?
測(cè)試數(shù)據(jù)
5 3
測(cè)試輸出
19
?
背景
? ? ? ? 斐波那契數(shù)列于1202年被提出,是以兔子繁殖為例子引入的數(shù)學(xué)式,推導(dǎo)中滿足的假設(shè)如下:
1.?????? 第一個(gè)月有一對(duì)新生兔子
2.?????? 出生后兔子需要再長(zhǎng)一個(gè)月才可以繁殖,且之后每個(gè)月都會(huì)繁殖
3.?????? 每個(gè)月每對(duì)成年兔子可以生出一對(duì)小兔子
4.?????? 兔子都不會(huì)死,也不會(huì)停止繁殖
? ? ? ?斐波那契數(shù)列體現(xiàn)了遞推的思想,滿足遞推公式:? ? ?

? ? ? ?自然界中很多現(xiàn)象體現(xiàn)斐波那契數(shù)列,如花瓣、莖葉排列等,在物理、化學(xué)等領(lǐng)域也多有應(yīng)用。
?
思路
? ? ? ?與原始的斐波那契數(shù)列相比,本題唯一的變化是每月每對(duì)兔子生出的小兔子變成了k對(duì)。在遞推公式中,F(xiàn)a+2是到這個(gè)月時(shí)的所有兔子,F(xiàn)a+1是到上月時(shí)的所有的兔子,F(xiàn)a是上個(gè)月之前出生的所有兔子(這個(gè)月可以繁殖),因此在計(jì)算下個(gè)月的兔子數(shù)時(shí),無需改變遞推公式其他部分,只用在這個(gè)月可以繁殖的兔子前乘上一個(gè)k即可。
?
Python知識(shí)點(diǎn)
利用While循環(huán)語句可以實(shí)現(xiàn)在一定條件下反復(fù)執(zhí)行特定代碼,實(shí)現(xiàn)遞推。
?
代碼
n = 5
k = 3
s1 = 1? # s1代表第一個(gè)月時(shí)兔子對(duì)數(shù)
s2 = 1? # s2代表第二個(gè)月時(shí)兔子對(duì)數(shù)
s = 0 ??# s是兔子總數(shù)
i = 3? # 從第三個(gè)月開始遞推
while i <= n:
??? s = s2 + k * s1? # 遞推公式
??? s1 = s2
??? s2 = s
??? i +=1
print(s)