欢迎光临散文网 会员登陆 & 注册

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

2019-02-02 18:40 作者:未琢  | 我要投稿

如果第一次阅读本系列文档请先移步阅读【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.       兔子都不会死,也不会停止繁殖

       斐波那契数列体现了递推的思想,满足递推公式:     

F1=F2=1

       自然界中很多现象体现斐波那契数列,如花瓣、茎叶排列等,在物理、化学等领域也多有应用。

 

思路

       与原始的斐波那契数列相比,本题唯一的变化是每月每对兔子生出的小兔子变成了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)


【ROSALIND】【练Python,学生信】04 斐波那契数列与兔子繁殖问题的评论 (共 条)

分享到微博请遵守国家法律