Мемоизация
def memoize(f):
params_cache = dict()
def wrapper(*args):
args_hash = hash(args)
if not params_cache.has_key(args_hash):
params_cache.update({args_hash: f(*args)})
return params_cache[args_hash]
wrapper.func_name = f.func_name
wrapper.cache = params_cache
return wrapper
@memoize
def fib(x):
if x <=1:
return 1
else:
return x + fib(x-1)
for x in range(1000000):
fib(x)
print fib(100000)
print len(fib.cache)
Просьба покритиковать.
Все ли тут кошерно?
Еще вопрос: я смутно помню, что в HOP(Higher Order Perl) что-то говорилось о том, что мемоизация лечит рекурсию. Теперь не могу понять: или я как-то не так написал, то ли подразумевалось иное.
UPD: Python 2.5
