各位好!
最近在学习递归的时候碰到了一些运行原理上的疑问,特来此请教大家
代码如下
def fastFib(n,memo):
global numCalls
numCalls += 1
print('fib called with',n)
if not n in memo:
memo[n] = fastFib(n-1,memo) + fastFib(n-2,memo)
return memo[n]
def fastFib1(n,memo):
global numCalls
numCalls = 0
res = fastFib(n,memo)
print('fastFib of',n,'=',res,', numCalls =',numCalls)
运行结果图如下
现有一个问题,描述如下表所示
为啥最后还要再调用一下n=1,2,3的情况呢?我推测是
Fb(5,memo)=Fb(4,memo)+
Fb(3,memo)
Fb(4,memo)=Fb(3,memo)+
Fb(2,memo)
Fb(3,memo)=Fb(2,memo)+
Fb(1,memo)
但Fb(1,memo)不是已经计算过一次了吗?为啥还要再计算一次?
求助各位详细描述一下Python中递归的原理
感谢!