python中用装饰器来优化计算斐波那契数列

#定义装饰器,记录计算中间结果防止重复计算
def memoize(f):
    memo = {}
    def helper(x):
        if x not in memo:            
            memo[x] = f(x)
        return memo[x]
    return helper

@memoize
def fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib(n-1) + fib(n-2)


def fib_seq(n):
    res = []
    if n > 0:
        res.extend(fib_seq(n-1))
    res.append(fib(n))
    return res

fib_seq(30)

上面只是为了用装饰器,当然最推荐的是使用yield 关键字来实现:

 
def fib_yield(n):
    a, b = 0, 1
    while n > 0:
        yield b
        a, b = b, a + b
        n -= 1
        
    ```
    从性能而言,第二种实现方式是最优的,第一种方式只是为了记录装饰器的写法。

你可能感兴趣的:(python)