相关疑难解决方法(0)

为什么这个memoizer适用于递归函数?

我无法弄清楚为什么以下代码是以fib线性而非指数时间运行的.

def memoize(obj):
    """Memoization decorator from PythonDecoratorLibrary. Ignores
    **kwargs"""

    cache = obj.cache = {}

    @functools.wraps(obj)
    def memoizer(*args, **kwargs):
        if args not in cache:
            cache[args] = obj(*args, **kwargs)
        return cache[args]
    return memoizer

@memoize
def fib(n):
    return n if n in (0, 1) else fib(n-1) + fib(n-2)
Run Code Online (Sandbox Code Playgroud)

例如,fib(100)并没有像我预期的那样完全爆炸.

我的理解是@memoize那套fib = memoize(fib).所以,当你打电话fib(100),看到100是不在缓存中,它会调用obj100.但这obj原始的fib功能,所以不应该花费同样长的时间(在第一次评估时),就好像我们根本没有记忆一样?

python recursion memoization

6
推荐指数
2
解决办法
304
查看次数

标签 统计

memoization ×1

python ×1

recursion ×1