一,阿米巴分裂的题目:
阿米巴虫用简单分裂的方式繁殖,
它每分裂一次要用 3 分钟,3分钟后会分裂成为2只。
将若干个阿米巴放在一个盛满营养液的容器内, 45 分钟后容器内充满了阿米巴。
已知容器最多能够装220只阿米巴。
试问,开始的时候往容器内放了多少个阿米巴?
二,解析一:
分析:
已知45分钟后容器装满,即:45分钟后阿米巴数量为: 220,
而45分钟则经历了45/3 = 15次分裂,
已知第15次分裂后数量f(15)=220 ,
可以推导得到第14次分裂后数量f(14)= 220/2 = f(15)/2
f(13) = f(14)/2
以此类推,
循环15次之后,可以得到第1次分裂前的数量
三,编写代码
1 2 3 4 5 |
x = 2 * * 20 # 阿米巴虫第15次分裂后的数量
for i in range ( 15 ): # 循环15次,迭代到第一次分裂前
x = x / 2
# 打印第一次分裂前的数量
print (f "容器内初始的阿米巴虫个数为:" , int (x))
|
运行结果:
容器内初始的阿米巴虫个数为: 32
四,解析二
分析:
已知第15次分裂后数量220 ,
可以推导得到第15次分裂前数量f(15)= 220/2
同理
f(14) = f(15)/2
f(13) = f(14)/2
以此类推
可以得到方程式如右图:
这种有递归终止条件的问题也适用递归函数解决:
说明:刘宏缔的架构森林—专注it技术的博客,
网址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/03/31/python-suan-fa-a-mi-ba-fen-lie/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: [email protected]
五,编写代码:
1 2 3 4 5 6 7 8 9 10 11 |
# 递归函数:返回第几次分裂前的阿米巴虫数量
# n: 第几次分裂
def bug(n):
if n = = 15 : # 第15次分裂前,返回2**20/2,终止递归
return 2 * * 20 / 2
else : # 其它情况,是下一次分裂数量的一半
return bug(n + 1 ) / 2
# 得到第一次分裂前的数量
print (f "容器内初始的阿米巴虫个数为:" , int (bug( 1 )))
|
运行结果:
容器内初始的阿米巴虫个数为: 32
标签:容器,15,python,分裂,算法,com,阿米巴,220
From: https://www.cnblogs.com/architectforest/p/18195750