我实现memoize函数有什么问题?

时间:2014-08-20 12:18:28

标签: javascript functional-programming memoization

理论上,应用于像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上的暂存器会继续死亡。

我有一种感觉,也许闭合不起作用。知道我做错了吗?

http://jsfiddle.net/x18ewhsu/

0 个答案:

没有答案