>>684 のリンク先に影響を受けて、デコレータでメモワイズを実装してみた。
「メモワイズ」って偉そうな名前だけど、要するに戻り値のキャッシュ。

#メモワイズ関数
def memoize(func):
    memo = {}
    def wrapper(x):
        # return memo.setdefault(x, func(x))
        if x in memo:
            return memo[x]
        else:
            return memo.setdefault(x, func(x))
    return wrapper

処理対象には、再帰の問題にはありがちだけど、フィボナッチ関数。
fn = f(n-1) + f(n-2), f2 = f1 = 1 で定義される奴。

#フィボナッチ関数
@memoize
def fib1(x):
    if x <= 2:
        return 1
    else:
        return fib1(x - 1) + fib1(x - 2)

fib() の定義に、@memoize が無い場合とある場合で比較してみたら、
素晴らしい高速化を実感できた。
デコレータいいねえ。