专栏首页Python小屋Python程序模拟手工推算考虑兔子寿命的斐波那契数列

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

推荐图书:

《Python程序设计(第3版)》,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年1月第6次印刷,山东省一流本科课程“Python应用开发”配套教材,清华大学出版社2020年度畅销图书(本书第二版为2019、2020年度畅销图书)

目录(二级)

第1章 基础知识/1

1.1 如何选择Python版本

1.2 Python安装与简单使用

1.3 使用pip管理扩展库

1.4 Python基础知识

1.5 Python代码编写规范

1.6 Python文件名

1.7 Python程序的__name__属性

1.8 编写自己的包

1.9 Python快速入门

1.10 The Zen of Python

第2章 Python数据结构/31

2.1 列表

2.2 元组

2.3 字典

2.4 集合

2.5 其他数据结构

第3章 选择与循环/67

3.1 运算符与条件表达式

3.2 选择结构

3.3 循环结构

3.4 break和continue语句

3.5 综合运用

第4章 字符串与正则表达式/83

4.1 字符串

4.2 正则表达式

第5章 函数设计与使用/115

5.1 函数定义

5.2 形参与实参

5.3 参数类型

5.4 return语句

5.5 变量作用域

5.6 lambda表达式

5.7 案例精选

5.8 高级话题

第6章 面向对象程序设计/138

6.1 类的定义与使用

6.2 类的方法

6.3 属性

6.4 特殊方法与运算符重载

6.5 继承机制

第7章 文件操作/158

7.1 文件基本操作

7.2 文本文件基本操作

7.3 二进制文件操作

7.4 文件级操作

7.5 目录操作

7.6 案例精选

第8章 异常处理结构与程序调试/181

8.1 基本概念

8.2 Python异常类与自定义异常

8.3 Python中的异常处理结构

8.4 断言与上下文管理

8.5 使用IDLE调试代码

8.6 使用pdb模块调试程序

第9章 GUI编程/199

9.1 tkinter基础

9.2 tkinter精彩编程

第10章 网络程序设计/230

10.1 计算机网络基础知识

10.2 UDP和TCP编程

10.3 Socket编程案例精选

10.4 网页内容读取与网页爬虫

第11章 安卓平台的Python编程/248

11.1 QPython简介

11.2 安卓应用开发案例

第12章 Windows系统编程/254

12.1 注册表编程

12.2 创建可执行文件

12.3 调用外部程序

12.4 创建窗口

12.5 判断操作系统版本

12.6 系统运维

第13章 多线程与多进程编程/273

13.1 threading模块

13.2 Thread对象

13.3 线程同步技术

13.4 多进程编程

第14章 数据库编程/294

14.1 SQLite应用

14.2 访问其他类型数据库

第15章 多媒体编程/306

15.1 图形编程

15.2 图像编程

15.3 音乐编程

15.4 语音识别

15.5 视频处理和摄像头接口调用

第16章 逆向工程与软件分析/328

16.1 主流项目与插件简介

16.2 IDAPython与Immunity Debugger编程

16.3 Windows平台软件调试原理

16.4 案例精选

第17章 科学计算与可视化/349

17.1 numpy简单应用

17.2 scipy简单应用

17.3 matplotlib简单应用

17.4 数据分析模块pandas

17.5 统计分析模块statistics

第18章 密码学编程/377

18.1 安全哈希算法

18.2 对称密钥密码算法DES和AES

18.3 非对称密钥密码算法RSA与数字签名算法DSA

=======================

斐波那契数列是生物、数学和计算机领域(可能还包括计划生育办公室)人士都比较熟悉的一个问题:小明买回来一对兔子,从第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个月的兔子总数是多少呢?

这是上周在Python小屋刷题神器(详见:Python小屋刷题神器最近升级的新功能介绍)中录入的一个新题目,题目发布之后余姚二中梁见斌老师指出这个题目的参考答案是错的,并给出了正确的计算方法,后来我在Python技术交流教师微信群里提出上述问题,国防科大刘万伟中国传媒大学胡凤国两位老师从不同角度推导了通项公式并进行了数学证明,山东工商学院厉玉蓉老师也在线下提供了非常好的推算方法和正确的通项公式:

当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列表保存数据。

本文分享自微信公众号 - Python小屋(Python_xiaowu),作者:董付国

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-02-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python第二十三课:递归斐波那契

    斐波那契(fibonacci) 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fib...

    红芽
  • 动态规划的楼层算法

    简单说,就是斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibona...

    sunsky
  • 十五道Python小案例,学会这些,Python基础已过关!

    分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

    QQ1622479435
  • 斐波那契数列与arguments.callee

    HTML5学堂:提到斐波那契数列,很多人还不是太清楚,但是如果提到兔子繁殖这个经典题目,相信学过计算机语言的人们会立刻感觉“亲切”起来,今天我们就来说说斐波那契...

    HTML5学堂
  • 我用 Python 面向对象做算法题,她说要先给兔子找上对象

    休假回来发现自己在刷题小组进度滞后,昨晚想着刷几道题赶赶进度,其中有一道还挺有意思:

    TTTEED
  • 斐波那契数列的算法分析

    看过我其他一些文章的人,可能想象不出我会写一篇关于斐波那契数列的文章。因为可能会感觉1,1,2,3…这样一个数列能讲出什么高深的名堂?嗯,本篇文章的确是关于斐氏...

    窗户
  • go 学习笔记之10 分钟简要理解 go 语言闭包技术

    闭包是主流编程语言中的一种通用技术,常常和函数式编程进行强强联合,本文主要是介绍 Go 语言中什么是闭包以及怎么理解闭包.

    雪之梦技术驿站
  • Python - 100天从新手到大师|D1-D7学习笔记

    上一周的时候,我们推送了一个python的良心教程,作者在4月8日再一次更新。按部就班阅读下来,就前几天的内容来看,与市面上大多数的书本教学相比,整体逻辑和侧重...

    生信菜鸟团
  • 利用Python实现斐波那契数列的方法实例

    砸漏

扫码关注云+社区

领取腾讯云代金券