【发布时间】:2019-11-09 23:12:48
【问题描述】:
考虑找到第 n 个斐波那契数。原始函数 fib(32) 和 _.memoize(fib)(32) 花费相同的时间。
function fib(num) {
if (num <= 1) return 1;
return fib(num - 1) + fib(num - 2);
}
// slow
console.time('with memo')
_.memoize(fib)(32)
console.timeEnd('with memo')
// slow
console.time('no memo')
fib(32)
console.timeEnd('no memo')
您会看到两者花费的时间大致相同。 没有性能改进。 有没有办法改变memoize 函数来创建一个真正的记忆,相当于在fib 内部实现记忆? Aka,我希望性能与以下相同:
// true memoization, actual performance improvement
// very fast!
cache = {}
function fib(n) {
if (!cache[n]){
if (n <= 1) cache[n] = 1;
else cache[n] = fib(n - 1) + fib(n - 2);
}
return cache[n]
}
【问题讨论】:
标签: javascript node.js underscore.js lodash memoization