随笔 - 10  文章 - 0  评论 - 0  阅读 - 20577

js函数记忆

实现一个常见的斐波那契函数:

var fibonacci = function(n){
    return n<2 ? n : fibonacci(n-1) + fibonacci(n-2);
};

然而,在我们实际计算时,做了很多无谓的工作,例如计算fibonacci(10)时,函数实际上被调用了177次!浪费了很多时间,如果我们能把之前计算得到的结果储存起来,便可以减少很多计算量。我们先声明一个memb数组用于储存数据,每次要计算时先查询数组里面是否有改值,如果有的话则直接调用,否则再计算。

复制代码
var fibonacci = function(){
    var memb = [0,1];
    var fib = function(n){
        var result = memb[n];
        if(typeof memb[n] !== 'number'){
            var result = fib(n-1) + fib(n-2);
            memb[n] = result;
        }
        return result;
    };
    return fib;
}();
复制代码

经过这样处理后,计算fibonacci(10)时函数实际上只调用了19次。

posted on   liuhanSF  阅读(235)  评论(0编辑  收藏  举报
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示