美文网首页
[JS]Memoization技术优化递归的重复计算

[JS]Memoization技术优化递归的重复计算

作者: 泉落云生 | 来源:发表于2018-05-22 20:12 被阅读6次

    是一种将函数返回值缓存起来的方法,Memoization 原理非常简单,就是把函数的每次执行结果都放入一个键值对中,在接下来的执行中,在键值对中查找是否已经有相应执行过的值,如果有,直接返回该值,没有才真正执行函数体的求值部分。很明显,找值,尤其是在键值对中找值,比执行函数快多了。

    //利用了闭包的变量储存在内存中
    function memoization(fn){
        var cache = {};
        return function(){
            var key = arguments[0];
            if(cache[key]){
                return cache[key]
            }else{
                var val = fn.apply(this,arguments);
                cache[key] = val;
                return val
            }
        }
    }
    
    var fibonacci = memoization(function(n){
        return (n === 0 || n === 1)?n:fibonacci(n-1)+fibonacci(n-2)
    })
    
    console.log(fibonacci(100))
    console.log(fibonacci(100))//代码中,第 2 次计算 fibonacci (100) 则只需要在内存中直接读取结果。
    

    相关文章

      网友评论

          本文标题:[JS]Memoization技术优化递归的重复计算

          本文链接:https://www.haomeiwen.com/subject/mcvkjftx.html