JS记忆优化-闭包

对于记忆模式的优化方面,在树上看到的不错的例子!
——节省了调用函数执行的时间

一般的递归函数的调用示例如下:

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

最后结果:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值