【ROSALIND】【练Python,学生信】04 斐波那契数列与兔子繁殖问题

如果第一次阅读本系列文档请先移步阅读【ROSALIND】【练Python,学生信】00 写在前面 谢谢配合~

题目:
根据斐波那契数列计算兔子的繁殖情况
Given: Positive integers n<40and k<5.
所给:正整数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).
需得:经过n个月后共有多少对兔子,第一个月有1对兔子,每对成年兔子每个月可以生k对小兔子(而不是我们熟悉的斐波那契数列假设的每月生一对)。
测试数据
5 3
测试输出
19
背景
斐波那契数列于1202年被提出,是以兔子繁殖为例子引入的数学式,推导中满足的假设如下:
1. 第一个月有一对新生兔子
2. 出生后兔子需要再长一个月才可以繁殖,且之后每个月都会繁殖
3. 每个月每对成年兔子可以生出一对小兔子
4. 兔子都不会死,也不会停止繁殖
斐波那契数列体现了递推的思想,满足递推公式:

自然界中很多现象体现斐波那契数列,如花瓣、茎叶排列等,在物理、化学等领域也多有应用。
思路
与原始的斐波那契数列相比,本题唯一的变化是每月每对兔子生出的小兔子变成了k对。在递推公式中,Fa+2是到这个月时的所有兔子,Fa+1是到上月时的所有的兔子,Fa是上个月之前出生的所有兔子(这个月可以繁殖),因此在计算下个月的兔子数时,无需改变递推公式其他部分,只用在这个月可以繁殖的兔子前乘上一个k即可。
Python知识点
利用While循环语句可以实现在一定条件下反复执行特定代码,实现递推。
代码
n = 5
k = 3
s1 = 1 # s1代表第一个月时兔子对数
s2 = 1 # s2代表第二个月时兔子对数
s = 0 # s是兔子总数
i = 3 # 从第三个月开始递推
while i <= n:
s = s2 + k * s1 # 递推公式
s1 = s2
s2 = s
i +=1
print(s)