python3.9
要求:有一种虫子,从成虫经过x个月产下y对卵,卵经过两个月长成成虫。假设成虫不死,开始只有一对,过了z个月,输出成虫的数量。(x,y,z从键盘输入)
希望代码好理解些
根据题意递归:
def math(x:int, y:int, z:int) -> int:
result = 1 # 刚开始时必有一只成虫
times = list(range(x, z-1, x))
# 列表表示生产的时间,因为虫需两个月成长,因此结束值-1(range函数生成的列表不包括结束值,达到-2效果)
for i in times:
result += 2 * y * math(x, y, z-i-2)
# 已经过了i个月,且需2个月成长,因此减去(i+2),递归,求剩余时间里这些虫能再生几个
return result
x = int(input('x:'))
y = int(input('y:'))
z = int(input('z:'))
print(math(x, y, z))
匆忙之下写成,可能有些不准确、不严谨。如果能帮到你,望采纳!
n = z//x+1
f(n) = f(n-1)*(y+1)
f(1) = 1
是这样吗
虫子只生一次卵吗