记忆

var fibonacci = function(){
    var memo = [0,1];
    var fib = function(n){
      var result = memo[n];   
      if(typeof result !== 'number'){
         result = fib(n-1) + fib(n-2);
         memo[n] = result;  //函数保存到数组中,实现记忆功能,减少函数的调用次数
      }
      return result;
    };
  return fib;
}(); //立即执行返回真正的函数,将memo数组作为闭包函数的全局变量

for(var i=0;i<10;i++){
  console.log(i + ": "+ fibonacci(i));
}

  

高级抽象,编写构造记忆功能函数:

var memoizer = function(memo, formula){
  var recur = function(n){
    var result = memo[n];
    if(typeof result !== 'number'){
       result = formula(recur,n);
       memo[n] = result;
    }
    return result;
  };
  return recur;
};

var fibonacci = memoizer([0,1],function(recur,n){
    return recur(n-1) + recur(n-2);
});

乘数:

var facrorial  = memoizer([1,1], function(recur, n){
   return n*recur(n-1);
});

  

posted @ 2015-03-12 10:36  lcw5945  阅读(89)  评论(0编辑  收藏  举报