【发布时间】:2014-06-02 20:15:54
【问题描述】:
这里有一小段代码可以将每个函数转换成它的记忆版本。
def memoize(f): # Memoize a given function f
def memf(*x):
if x not in memf.cache:
memf.cache[x] = f(*x)
return memf.cache[x]
memf.cache = {}
return memf
例如,如果我们有一个函数fib,它返回nth 斐波那契数:
def fib(n):
if n < 2:
return 1
else:
return fib(n-1) + fib(n-2)
现在,上面的函数可以通过使用来记忆了
fib = memoize(fib)
到目前为止一切都很好,但我无法理解的是,如果我们这样做,而不是:
fib = memoize(fib)
我们改为这样做:
fib2 = memoize(fib)
函数fib2 不是fib 的memoized 函数。当我们运行fib2 时,它就像普通的 fib 一样运行。请解释为什么这个 memoize 函数被应用于说一个函数 f 当且仅当我们使用:
f = memoize(f)
memoization 代码取自 edx.org 提供的 MOOC 6.00x。它现在没有运行,这就是我来这里询问的原因。
【问题讨论】:
-
这很有帮助。谢谢!
标签: python function memoization