JavaScript Closure Memorization

来源:互联网 发布:什么牌子沙发好 知乎 编辑:程序博客网 时间:2024/06/14 00:52

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