如何使用递归计算一个数字达到最大值需要多长时间?

时间:2018-11-07 03:45:42

标签: python recursion

我正在编写一个递归函数来分析随时间变化的各种物种种群增长。我有四个参数:第一年的物种初始种群(a),我想知道未来几年种群的种群数量(b),百分比增长率(c)以及最后的增长率环境可以处理的特定物种的最大数量(d)。

(我正在使用的人口增长公式是(a * b-1 + c)*(a * b-1)* 1-(a * b-1 / d))

到目前为止,这就是我所拥有的:

def animal_growth(a,b,c,d):
    growth = (a * b-1 + c) * (a *b-1)
    max_growth = growth * 1 - (a * b-1/d)
    if a > 10000:
         return 
    else:
         return max_growth 

 animal_growth(200,20,0.05,5000)

因此,在上面的示例中,我希望找出以“每年” 5%的增长率增长超过5000个动物种群所需的时间,以及该种群在20年内的增长情况,从200岁的人口开始。

我希望获得控制台输出,例如:

  8.4 # how long it will take to exceed 5000 
  6000 # the population after 20 years 
  # neither of these might be correct so if there are different answers no worries

我在事情的递归方面,我所理解的公式和数学上陷入困境。

谢谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我认为您应该创建2个独立的函数,一个函数计算增长到一定数量所需的年数,一个函数计算给定年份可以增长多少

def number_of_years_to_grow(initial, rate, max_growth):
    growth = initial * (1 + rate)
    if (growth <= max_growth):
        return 1 + animal_growth(growth, rate, max_growth)
    else:
        return 1 # or return 0 (depending on whether you want to include the year where it exceed the maximum number or not)

def population_growth(initial, years, rate):
    return initial * ((1 + rate) ** years)

print(number_of_years_to_grow(200, 20, 0.05))
print(animal_growth(200, 0.05, 5000))

还有其他提示,请使用有意义的变量名以提高可读性。

答案 1 :(得分:0)

您需要的功能是这样的:

pkg