日期:2014-05-16 浏览次数:20343 次
//函数可以用对象去记住之前操作的结果,从而能避免无所谓的运算,这种优化叫做记忆 //使用递归函数计算fibonacci数列 斐波纳数列 var fibonacci = function(n){ return n<2 ? n : fibonacci(n-1) + fibonacci(n-2); } for(var i=0; i<=10; i+=1){ //console.log('//'+i+':'+fibonacci(i)); } //存贮结果可以隐藏在闭包忠。当我们函数被调用是,首先检测存贮结果 如果已经存在立即返回 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; }(); var a = _fibonacci; for(var i=0; i<=10; i+=1){ console.log('//'+i+':'+a(i)); } //我们把这种形式一般化, 编写一个函数帮主我们构造带记忆功能的函数 var memoizer = function(memo, fundamental){ var shell = function(n){ var result = memo[n]; if(typeof result !== 'number'){ result = fundamental(shell, n); memo[n] = result; } console.log(memo); return result; } return shell; }; var fibon = memoizer( [0,1] , function(shell, n){ return shell(n-1) + shell(n-2); }) var factoial = memoizer([1,1], function(shell,n){ return n * shell(n-1); }) console.log(factoial(5));