对于记忆模式的优化方面,在树上看到的不错的例子!
——节省了调用函数执行的时间
一般的递归函数的调用示例如下:
function normaldigui(){
var count=0;
var fibonacci=function(n){
count++;
return n < 2 ? 1 : fibonacci(n-1) + fibonacci(n-2);
};
for(var i=0;i<=5;i++){
document.writeln(fibonacci(i)+",,,"+count+"<br/>");
}
}
window.onload= function(){
var startTime,endTime;
var d= new Date();
startTime = d.getTime();
normaldigui();
var d= new Date();
endTime = d.getTime();
document.writeln(endTime-startTime);
}
最后结果:
下面是优化后的代码:
//记忆优化的示例,使用了闭包,节省了反复执行同n时的方法时间,也是对一般的递归形式进行优化
function jiyi (){
var count=0;
var fibonacci = function() {
console.log(count);
var memo = [0,1];
var fib = function(n){
count++;
var result = memo[n];
if(typeof result !== 'number'){
result = fib(n-1) + fib(n-2);
memo[n] = result;
}
return result;
};
return fib;
}();
for(var i=0;i<=5;i++){
document.writeln(fibonacci(i)+",,,"+count+"<br/>");
}
}
window.onload= function(){
var startTime,endTime;
var d= new Date();
startTime = d.getTime();
jiyi();
var d= new Date();
endTime = d.getTime();
document.writeln(endTime-startTime);
}
最后结果: