我必须编写一个应该递归的fib_memoize(n)
函数,但它应该记住它的答案,以便它的运行时间为O(n)
。
这就是我所拥有的:
def fib_memoize(n):
memo = {}
if n in memo:
return memo[n]
else:
if n <=2:
f = 1
else:
f = fib_recursive(n-1) + fib_recursive(n-2)
memo[n] = f
return f
这给我一个断言错误1 != 0
。这指向什么?我错过了什么?
这是我的fib_recursive
函数(通过测试):
def fib_recursive(n):
if n <=1:
return n
else:
return fib_recursive(n-1) + fib_recursive(n-2)
答案 0 :(得分:2)
通常使用原始函数上的装饰器进行记忆,例如:
import functools
def memoize(fn):
cache = {}
@functools.wraps(fn)
def memoizer(n):
if n not in cache:
cache[n] = fn(n)
return cache[n]
return memoizer
@memoize
def fib_recursive(n):
if n <=1:
return n
else:
return fib_recursive(n-1) + fib_recursive(n-2)
这会将原始fib_recursive
函数转换为memoized函数。