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