JavaScript Closure Memorization

js闭包记忆化编程学习

利用记忆化使递归次数大大减少。
以Fibonacci数列为例:

var fibonacci = function(){
    var memo = [0, 1];
    var fib = function(i){
        var result = memo[i];
        if(typeof result !== 'number'){
            result = fib[i-1]+fib[i-2];
            memo[i] = result;
        }
        return result;  
    }
    return fib;
}();

for(var i = 0; i < 10; ++i){
    console.log(fibonacci(i));
}

进一步封装:

var memoizer = function(memo, fundamental){
    var shell = funciton(n){
        var result = memo[n];
        if(typeof result !== 'number'){
            result = fundamental(shell, n);
            memo[n] = result;
        }
        return result;
    };
    return shell;
}

//斐波那契数列
var fibonacci = memoizer([0,1], function(shell, n){
    return shell(n - 1)+shell(n - 2);
})  

//阶乘
var factorial = memoizer([1,1], function(shell, n){
    return shell(n-1)*n; 
})

猜你喜欢

转载自blog.csdn.net/bkjs626/article/details/78440123