Вот небольшой фрагмент кода, который преобразует каждую функцию в свою версию memoization.Memoization python function
def memoize(f): # Memoize a given function f
def memf(*x):
if x not in memf.cache:
memf.cache[x] = f(*x)
return memf.cache[x]
memf.cache = {}
return memf
Например, если мы имеем функцию fib
следующим которая возвращает n
-е число Фибоначчи:
def fib(n):
if n < 2:
return 1
else:
return fib(n-1) + fib(n-2)
Теперь данная функция может быть memoized с помощью
fib = memoize(fib)
Все в порядке до этого момента, но я не могу понять, что если мы сделаем что-то подобное, вместо:
fib = memoize(fib)
мы вместо того, чтобы сделать:
fib2 = memoize(fib)
функцию fib2 isn't a
memoize d function of
выдумка . When we run
fib2 it runs like ordinary fib. Please explain why this
memoize function gets applied to say a function
f` тогда и только тогда, когда мы используем:
f = memoize(f)
Код запоминанием берется из 6.00xa MOOC предоставлено edx.org. Это не работает прямо сейчас, поэтому я пришел сюда, чтобы спросить.
Этот вопрос актуален: http://stackoverflow.com/ Вопросы/20909200/why-do-this-memoizer-work-on-recursive-functions? rq = 1 – jonrsharpe
Это полезно. Благодаря! – user3544994