def fib(n):
global numCalls
numCalls += 1
## print numCalls, 'fib called with', n
if n <= 1:
return 1
else:
return fib(n-1) + fib(n-2)
def fastFib(n, memo):
global numCalls
numCalls += 1
print numCalls, 'fib1 called with', n
if not n in memo:
# print 'calc', n
memo[n] = fastFib(n-1, memo) + fastFib(n-2, memo)
return memo[n]
def fib1(n):
memo = {0:1, 1:1}
res = fastFib(n, memo)
## print memo
return res
numCalls = 0
a= raw_input('Enter n: ')
n = int(a)
result = fib1(n)
print 'fib of', n, 'is', result, 'and it takes', numCalls