这个带有记忆功能(JavaScript)的斐波那契程序的运行过程是什么



这是一个有效的JavaScript程序,用于生成斐波那契数,并通过记忆实现。

function memoize(fn) {
cache = {};
return function(...args){
if (cache[args]) {
return cache[args];
}
const results = fn.apply(null, args);
cache[args] = results;
return results;
}
}
function slowfib(n) {
if (n < 2) {
return n;
}
return fib(n-1) + fib(n-2);
}
fib = memoize(slowfib);
module.exports = fib;

在使用调试器语句之后,我意识到memoize只被调用一次,即使fib被调用多次。

为什么会这样?更具体地说,fib = memoize(slowfib)是如何工作的?

就像a = myFunction(b)一样,fib = memoize(slowfib)只执行一次。它的结果是一个新函数,存储在fib中,每当执行fib(x)时都会使用它。因此,调试器应该显示以下对每次调用都执行

function(...args){
if (cache[args]) {
return cache[args];
}
const results = fn.apply(null, args);
cache[args] = results;
return results;
}

最新更新