理论上,应用于像Fibonacci这样的引用透明的memoization应该会大大加快速度。
Function.prototype.memoize = function () {
var cache = {},
slice = Array.prototype.slice,
originalFunction = this;
return function () {
var key = slice.call(arguments);
if (key in cache) {
return cache[key];
} else {
return (cache[key] = originalFunction.apply(this, key));
}
};
};
var Y = function (f) {
return function (x) {
return f(Y(f))(x);
};
};
var almostFibonacci = function (f) {
return function (n) {
return n == 0 || n == 1 ? n : f(n - 1) + f(n - 2);
};
};
console.log(Y(almostFibonacci).memoize()(50));
以上实施没有。在这种情况下,计算第50 个Fibonacci数字在备忘录版本的情况下应该是非常可行的。当我尝试时,Firefox上的暂存器会继续死亡。
我有一种感觉,也许闭合不起作用。知道我做错了吗?