在python中记住fibonacci序列

时间:2018-04-20 03:31:32

标签: python fibonacci memoization

我必须编写一个应该递归的fib_memoize(n)函数,但它应该记住它的答案,以便它的运行时间为O(n)
这就是我所拥有的:

def fib_memoize(n):
    memo = {}
    if n in memo:
        return memo[n]
    else:
        if n <=2:
            f = 1
        else:
            f = fib_recursive(n-1) + fib_recursive(n-2)

        memo[n] = f
        return f

这给我一个断言错误1 != 0。这指向什么?我错过了什么?

这是我的fib_recursive函数(通过测试):

def fib_recursive(n):
    if n <=1:
        return n
    else:
        return fib_recursive(n-1) + fib_recursive(n-2)

1 个答案:

答案 0 :(得分:2)

通常使用原始函数上的装饰器进行记忆,例如:

import functools

def memoize(fn):
    cache = {}

    @functools.wraps(fn)
    def memoizer(n):
        if n not in cache:
            cache[n] = fn(n)
        return cache[n]
    return memoizer

@memoize
def fib_recursive(n):
    if n <=1:
        return n
    else:
        return fib_recursive(n-1) + fib_recursive(n-2)

这会将原始fib_recursive函数转换为memoized函数。