您当前的位置:首页 > 计算机 > 编程开发 > Python

Python程序模拟手工推算考虑兔子寿命的斐波那契数列

时间:01-07来源:作者:点击数:

斐波那契数列是生物、数学和计算机领域(可能还包括计划生育办公室)人士都比较熟悉的一个问题:小明买回来一对兔子,从第3个月开始就每个月生一对兔子,生的每一对兔子长到第3个月也开始每个月都生一对兔子,每一对兔子都是这样从第3个月开始每个月生一对兔子,那么每个月小明家的兔子数量(对)构成一个数列,这就是著名的斐波那契数列。

Python栏目已经发布过关于这个数列的系列文章,详见:

  1. 尾递归优化原理与Python实现(以Fibonacci数列和小明爬楼梯问题为例)
  2. 计算Fibonacci数列第n项的第8种方法(数学推导与Python实现)
  3. Fibonacci数列第n项的第7种计算方法:Python列表
  4. 三种Fibonacci数列第n项计算方法及其优劣分析
  5. Python快速计算Fibonacci数列中第n项的方法

现在的问题是,如果假设每一对兔子的寿命都是72个月,并且只要活着就坚持每个月生一对小兔子。那么任意第n个月的兔子总数是多少呢?

非常好的推算方法和正确的通项公式:

当n=1或n=2时,f(n)=1

当n<72时,f(n)=f(n-1)+f(n-2)

当n=73时,f(n)=f(n-1)+f(n-2)-2

当n>73时,f(n)=f(n-1)+f(n-2)-f(n-72)

具体的数学推导和讨论过程不再赘述,为了从数值上验证通项公式的正确性,我编写了两个程序,通过不同的推算方式来模拟手工推算过程,这是本文的重点。

第一个程序的思路是,每行的数字表示这个月新出生的兔子数量,行的长度表示这些新生兔子存活的月数,这样的话每列数字之和就是这个月的兔子数量(单位:对),如下图所示:

图片

生成上图Excel中数据的程序如下,可以通过调整参数来设置兔子存活的月数。

图片

第二个程序的思路是,以下图为例,每往下一行往右一列表示兔子长大一个月,行数与兔子寿命月数一样多,第n列的数字之和即为该月兔子总数(单位:对)

图片

生成上面Excel文件的Python程序如下,可以通过调整main()函数的参数任意设置兔子从第几个月开始生兔子以及兔子的寿命。

图片

上面的两个程序都是把生成的数据存放到Excel文件中,当数值超过一定大小之后,会进行四舍五入。大家可以按照上面的思路自行改写为使用Python列表保存数据。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门