def fibonacci(n, cache=None):
'''斐波那契数列:如果只简单地调用递归,那么消耗的内存资源就很多,
于是存放在缓存cache变量中'''
if cache is None:
cache = {}
if n in cache:
return cache[n]
if n <= 1:
return 1
cache[n] = fibonacci(n - 1, cache) + fibonacci(n - 2, cache)
return cache[n]
def memo(func):
'''装饰器'''
cache = {}
def wrap(*args):
if args not in cache:
cache[args] = func(*args)
return cache[args]
return wrap
@memo
def fibonacci_(n):
if n <= 1:
return 1
return fibonacci_(n - 1) + fibonacci_(n - 2)
@memo
def climb(n, steps):
count = 0
if n == 0:
count = 1
elif n > 0:
for step in steps:
count += climb(n - step, steps)
return count
print fibonacci_(50)
print climb(10, (1, 2, 3))