函数可将之前操作的结果记录在某个对象里,避免无谓的重复计算,js的对象和数组要实现这种优化是非常方便的。
下面这是一个构造带记忆功能函数的函数:
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 factorial = memoizer([1,1],function(recur,n){ return n*recur(n-1); });