Pythonのお勉強 Part15
■ このスレッドは過去ログ倉庫に格納されています
0722デフォルトの名無しさん
2006/12/08(金) 16:29:11「メモワイズ」って偉そうな名前だけど、要するに戻り値のキャッシュ。
#メモワイズ関数
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 が無い場合とある場合で比較してみたら、
素晴らしい高速化を実感できた。
デコレータいいねえ。
■ このスレッドは過去ログ倉庫に格納されています