<p>如果您在Python中使用一个带记忆的fibonacci函数,您将看到它变得更快:</p>
<pre><code>import time
beg = time.clock()
def memoize(f):
cache = {}
def decorated_function(*args):
if args in cache:
return cache[args]
else:
cache[args] = f(*args)
return cache[args]
return decorated_function
@memoize
def fib(n):
if n <=2:
return 1
return fib(n-2) + fib(n-1)
var = fib(35)
end = time.clock()
print(var)
print(end - beg)
</code></pre>
<p>在javascript中也可以这样做:</p>
<pre><code>function memoize( fn ) {
return function () {
var args = Array.prototype.slice.call(arguments),
hash = "",
i = args.length;
currentArg = null;
while (i--) {
currentArg = args[i];
hash += (currentArg === Object(currentArg)) ?
JSON.stringify(currentArg) : currentArg;
fn.memoize || (fn.memoize = {});
}
return (hash in fn.memoize) ? fn.memoize[hash] :
fn.memoize[hash] = fn.apply(this, args);
};
}
var beg = new Date().getTime();
function fib(n)
{
if (n <= 2)
return 1;
return fib(n-2) + fib(n-1);
}
var f = memoize(fib)(35);
var end = new Date().getTime();
console.log(f);
console.log(end - beg);
</code></pre>
<p>看起来javascript方面没有性能改进,这往往表明这里已经内置了某种记忆机制。</p>
<p>学分:<a href="http://ujihisa.blogspot.fr/2010/11/memoized-recursive-fibonacci-in-python.html">http://ujihisa.blogspot.fr/2010/11/memoized-recursive-fibonacci-in-python.html</a>,<a href="http://addyosmani.com/blog/faster-javascript-memoization/">http://addyosmani.com/blog/faster-javascript-memoization/</a></p>