记忆:函数可以将先前操作的结果记录在某个对象里面,从而避免无谓的重复运算。这种优化被称之为记忆。
斐波那契数列:
一般写法:
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);
})
网友评论