例如,教科书中的代码——使用递归解决斐波那契问题——是这样的:
cache = {}
def fibo(n):
if n in cache :
return cache[n]
elif n <=2:
cache[n] = 1
else:
cache[n] = fibo(n-1) + fibo(n-2)
return cache[n]
但是,我担心每次进行函数调用时都需要成本。为什么教科书不使用这段代码,以避免不必要的函数调用:
cache = {}
def fibo(n):
if n <=2:
cache[n] = 1
else:
# to avoid unnecessary function call
if n-1 in cache:
f1 = cache[n-1]
else:
f1 = fibo(n-1)
if n-2 in cache:
f2 = cache[n-2]
else:
f2 = fibo(n-2)
cache[n] = f1 + f2
return cache[n]
这样,我们可以在实际调用之前避免不必要的函数调用。
无论如何,我的问题是,为什么教科书的作者不使用第二种方式编写代码?