以经典斐波那契数列为例:
经典写法:
let i = 0;
var fibonacci_old = function (n) {
// console.log(++i);
return n < 2 ? n : fibonacci_old(n - 1) + fibonacci_old(n - 2);
};
添加记忆后优化写法:
let i = 0;
var fibonacci = function () {
var memo = [0, 1];
var fib = function (n) {
var result = memo[n];
if (typeof result !== 'number') {
result = fib(n - 1) + fib(n - 2);
}
return result;
};
return fib;
}();
这个算法结合js闭包特性,引入了记忆组,减少了非常多不必要的自我调用