修复了一个在处理后崩溃的递归python程序

时间:2017-08-03 01:26:27

标签: python recursion

我需要一些家庭作业的帮助。我对python并不熟悉。但是,我对这个小python程序有一些问题。它使用递归根据给定的函数打印出一组数字。它达到大约num = 30并且程序崩溃。不确定有什么问题或如何解决它。救命?

def func(num):
  if num==0:
   return 0
 elif num==1:
   return 1
 else:
   return func(num-1)+2*func(num-2)
for num in range(2,101):
 print(num,func(num))

1 个答案:

答案 0 :(得分:1)

它没有崩溃,但递归次数变得很大而且计算时间太长,你可以使用memoization通过传递字典来存储已经存在的值来递增递归速度计算后,您可以轻松地从字典中检索它,而不是再次计算。如果您在elif/else内返回值,则也不需要使用if-statement,例如:

def func(num, m):
    if num == 0:
        return 0
    if num == 1:
        return 1
    if num not in m:
        m[num] = func(num-1, m)+2*func(num-2, m)
    return m[num]

m = {}
for num in range(2,101):    
    print(num,func(num, m))