Image

Imageingas wrote in Imageru_python

Мемоизация


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