我需要一些家庭作业的帮助。我对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))
答案 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))