我目前正在经历' Javascript:好的部分'道格拉斯·克罗克福德(Douglas Crockford)就是一个展示记忆化概念的例子。
var memoizer = function (memo, fundamental) {
var shell = function (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);
});
我不明白的是,n
的价值来自哪里?
答案 0 :(得分:1)
n
是一个输入。它没有"来"从您发布的代码中的任何位置,您必须提供一个值。
答案 1 :(得分:1)
在代码var shell = function (n)
中,您指定在调用函数shell
时,您将为其提供输入参数n
。因此,如果您拨打shell(5)
,n
将等于5,或您传入的任何其他号码。
您需要查看在每个函数调用中调用和返回的内容 - fibonacci
设置为memoizer
函数的返回值,memoizer
返回shell
函数接收n
。因此,虽然您的示例代码中从未调用它,但最后您可以调用fibonacci(5)
,其中5是您的n
。只需按照函数调用并返回。