这是一小段代码,可将每个函数转换为其记忆版本。
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
Run Code Online (Sandbox Code Playgroud)
例如,如果我们有一个函数fib返回第nth Fibonacci 数:
def fib(n):
if n < 2:
return 1
else:
return fib(n-1) + fib(n-2)
Run Code Online (Sandbox Code Playgroud)
现在,上面的函数可以通过使用来记忆
fib = memoize(fib)
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很好,但我无法理解的是,如果我们这样做,而不是:
fib = memoize(fib)
Run Code Online (Sandbox Code Playgroud)
相反,我们这样做:
fib2 = memoize(fib)
Run Code Online (Sandbox Code Playgroud)
该函数fib2不是 的memoized 函数fib。当我们运行时,fib2它就像普通的 fib 一样运行。请解释为什么当且仅当我们使用这个memoize函数来表示一个函数f时:
f = memoize(f)
Run Code Online (Sandbox Code Playgroud)
memoization 代码取自 …