记忆
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);
});

浙公网安备 33010602011771号