# -*- coding:utf-8 -*-
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]
# print fibonacci(150)
# 改进:
def memo(func):
'''装饰器'''
cache = {}
def wrap(*args):
if args not in cache:
cache[args] = func(*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))
9-1使用函数装饰器
最新推荐文章于 2025-07-15 19:24:55 发布
248

被折叠的 条评论
为什么被折叠?



