JS---记忆

2018-01-15  本文已影响0人  麻辣小面瘫

记忆:函数可以将先前操作的结果记录在某个对象里面,从而避免无谓的重复运算。这种优化被称之为记忆。

斐波那契数列:
一般写法:

function Fibb(n){
  return n < 2? n : Fibb(n-1)+Fibb(n-2);
}

但是这样写,做了太多了无所谓的计算
优化:

  声明一个moment的数组来保存计算的结果,这个存储结果可以隐藏在闭包中,当函数被调用时,这个函数首先检查结果是否存在,如果存在,则立即返回;
   var fibb = function(){
      var moment = [0,1];
      var fib = function(n){
          var results = moment[n];
          if(typeof result !== 'number'){
               result = fib(n-1) + fib(n-2);
               moment = result[n];
          }
          return results
      };
      return fib;
   }()

推广

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

var fibb = momizer(momt[0,1],function(recur,n){
  return recur(n-1) + recur(n-2);
})
上一篇 下一篇

猜你喜欢

热点阅读