我知道如何递归地做斐波那契数列,这很简单:
def F(n):
if n == 1 or n == 2:
return 1
else:
return k * F(n-2) + F(n - 1)
但是我知道这是非常低效的,因为它必须一次又一次地计算相同的值。解决此问题的一种方法是在进行过程中以某种方式存储值。假设您想要第 20 个值。一旦你计算出 F(13) 是什么,它的值就可以被存储和直接调用,而不是遍历所有递归级别来获得相同的答案。
字典是解决这个问题的明显方法。但是,我涉及字典的答案不起作用。
U = {1:1, 2:1}
def F(n):
global U
if n in U:
return U[n]
else:
U[n] = F(n - 2) + F(n - 1)
运行此代码后,只需打印 U[n]。
我已经多次运行逻辑,一切似乎都很好,但我不断收到此错误:
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
每当我尝试大于 3 的数字时。我不知道None
应该如何返回 a,但我承认我可能遗漏了导致问题的字典的某种细微差别。