fib recursion-memoization 装饰器实现

原题:LeetCode explore: recursion-memoization

import functools
class Solution:
    def fib_helper(fn):
        cache = {}
        @functools.wraps(fn)
        def wrapper(*args, **kw):
            n = args[1]
            if n in cache:
                return cache[n]
            result = fn(*args, **kw)
            cache[n] = result
            return result
        return wrapper
    
    @fib_helper
    def fib(self, N: int) -> int:
        if N < 2:
            return N
        return self.fib(N - 1) + self.fib(N - 2)

注: 上述方法存在一个问题:cache是static的,即不是每次调用都更新。所以上述递归的实现类似于一种打表。