Python趣味算法学习笔记------兔子产子(不死神兔)
Posted Amo Xiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python趣味算法学习笔记------兔子产子(不死神兔)相关的知识,希望对你有一定的参考价值。
目录
一、问题描述
有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总对数为多少?
二、问题分析
兔子产子问题是一个有趣的古典数学问题,我们画一张表来找一下兔子数的规律,如下表所示:
月数 | 小兔子对数 | 中兔子对数 | 老兔子对数 | 兔子总对数 |
---|---|---|---|---|
1 | 1 | 0 | 0 | 1 |
2 | 0 | 1 | 0 | 1 |
3 | 1 | 0 | 1 | 2 |
4 | 1 | 1 | 1 | 3 |
5 | 2 | 1 | 2 | 5 |
6 | 3 | 2 | 3 | 8 |
7 | 5 | 3 | 5 | 13 |
说明: 不满1个月的兔子为小兔子,满1个月不满2个月的为中兔子,满3个月以上的为老兔子。可以看出,每个月的兔子总数依次为 1,1,2,3,5,8,13… 这就是 Fibonacci 数列。总结数列规律即为从前两个月的兔子对数可以推出第3个月的兔子对数。
三、算法设计
本题目是典型的迭代循环,即是一个不断用新值取代变量的旧值,然后由变量旧值递推出变量新值的过程。这种迭代与这些因素有关:初值、迭代公式和迭代次数。经过问题分析,算法可以描述为:
f
i
b
n
=
f
i
b
n
−
1
=
1
,
(
n
<
3
)
初
值
f
i
b
n
=
f
i
b
n
−
1
+
f
i
b
n
−
2
,
(
n
>
=
3
)
迭
代
公
式
\\left\\ \\beginarrayc fib_n=fib_n-1=1,(n<3) 初值\\\\ fib_n=fib_n-1+fib_n-2,(n>=3) 迭代公式 \\\\ \\endarray \\right.
fibn=fibn−1=1,(n<3)初值fibn=fibn−1+fibn−2,(n>=3)迭代公式
四、确定程序框架
用 Python 语言来描述迭代公式即为 fib=fib1+fib2,其中 fib 为当前新求出的兔子对数,fib1 为前一个月的兔子对数,fib2 为前两个月的兔子对数,然后为下一次迭代做准备,,进行如下的赋值 fib2=fib1,fib1=fib,要注意赋值的次序;迭代次数由循环变量控制,为所求的月数。
五、视频讲解
有时间补
六、示例代码
# -*- coding: utf-8 -*-
# @Time : 2022/3/8 10:43
# @Author : AmoXiang
# @FileName: 2.兔子产子.py
# @Software: PyCharm
# @Blog :https://blog.csdn.net/xw1680?
if __name__ == "__main__":
fib1 = 1
fib2 = 1
for i in range(1, 15): # 每次求两个,因此循环变量循环到15
print(fib1, fib2)
fib1 = fib1 + fib2 # 最新一个月的兔子对数
fib2 = fib1 + fib2 # 第4个月的兔子对数
i += 1
print(fib1, fib2)
以上是关于Python趣味算法学习笔记------兔子产子(不死神兔)的主要内容,如果未能解决你的问题,请参考以下文章