9-1使用函数装饰器

# -*- 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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值