import functools def memoize(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): if n < 2: return n else: return fib(n - 1) + fib(n - 2)