【发布时间】:2020-05-23 19:05:47
【问题描述】:
我正在学习编程课程,有一个关于斐波那契和和递归的问题。 规则如下:
编写一个函数 fibsum(N),返回所有小于 N 的偶数斐波那契项的总和。
我想我已经接近了,但我的求和不能正常工作,而且我希望函数能工作得相当高(至少像 N = 10**6),这是我到目前为止的代码
def fibsum(n, memo = {}):
added = 0
if n<0:
return 0
if n== 1 or n == 0:
return 1
else:
if (n-1) in memo.keys():
f1 = memo[n-1]
else:
memo[n-1] = fibsum(n-1)
f1 = memo[n-1]
if (n-2) in memo.keys():
f2 = memo[n-2]
else:
memo[n-2] = fibsum(n-2)
f2 = memo[n-2]
if f1+f2 < 44:
if (f1+f2) % 2 == 0:
added += f1+f2
print ("look here",added)
return added
print (f1+f2)
return f1 + f2
我留下了一些打印语句,因为我试图调试问题,但我没有运气。
编辑:我已经链接了另一个问题,但在这种情况下它是迭代完成的,如果可能的话,我想递归地完成它
【问题讨论】:
-
这是一个调试问题,但我建议将这个问题一分为二:一个是“fib()”函数,它返回任何值,另一个是要求偶数值并对它们求和。跨度>
-
我这样做时的问题是,如果函数调用 n = 4*10**6(就像在提供给我们的测试用例中一样),它会达到最大递归深度,我想提前终止该函数会使该函数不会深入递归。我的问题是为什么总和不适用于添加的 += 部分
标签: python recursion memoization