【发布时间】:2015-06-16 17:30:45
【问题描述】:
我有这种记忆技术来减少获取斐波那契序列号的调用次数:
def fastFib(n, memo):
global numCalls
numCalls += 1
print 'fib1 called with', n
if not n in memo:
memo[n] = fastFib(n-1, memo) + fastFib(n-2, memo)
return memo[n]
def fib1(n):
memo = {0:1, 1:1}
return fastFib(n, memo)
numCalls = 0
n = 6
res = fib1(n)
print 'fib of', n,'=', res, 'numCalls = ', numCalls
但我被困在这里:memo[n] = fastFib(n-1, memo) + fastFib(n-2, memo) 和这里memo = {0:1, 1:1}。每次我想得到一个数字的 fib 时,它是如何准确减少调用次数的?
【问题讨论】:
-
顺便说一句 - 你的备忘录应该是:
memo = {0:0, 1:1}而不是memo = {0:1, 1:1}。
标签: python algorithm memoization