記憶:函數(shù)可以將先前操作的結(jié)果記錄在某個對象里面,從而避免無謂的重復(fù)運算。這種優(yōu)化被稱之為記憶。
斐波那契數(shù)列:
一般寫法:
function Fibb(n){
return n < 2? n : Fibb(n-1)+Fibb(n-2);
}
但是這樣寫,做了太多了無所謂的計算
優(yōu)化:
聲明一個moment的數(shù)組來保存計算的結(jié)果,這個存儲結(jié)果可以隱藏在閉包中,當(dāng)函數(shù)被調(diào)用時,這個函數(shù)首先檢查結(jié)果是否存在,如果存在,則立即返回;
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);
})