【发布时间】:2021-02-26 14:15:59
【问题描述】:
示例 1.
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);
memo[n] = result;
}
return result;
};
return fib;
}();
示例 2。
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);
});
以上是 Crockford 书中的 2 个代码 sn-ps,用于演示记忆的概念。
问题 1. 如何从 2 个示例中的任何一个调用 fibonacci 函数?按照惯例斐波那契 (5)?
问题 2. 如我所见,在调用 var fib = function (n) { 或 时,没有在任何地方定义参数“n” var shell = 函数 (n) {. 在斐波那契函数的第一个示例中,我希望在第二行 var memo = [0, 1]; 之后立即定义“n”,并且我希望定义“n”如下:n = arguments[0];。 但是既然情况似乎不是这样,所以我不得不问:当调用斐波那契时,“n”是如何确定的?
谢谢。
【问题讨论】:
-
n是赋值给变量
recur的匿名函数的参数,所以确实是定义的。您需要将重现问题所需的代码放在问题本身中,而不是放在链接中的图片中。别人是否理解你并不重要。此问题不符合网站标准,需要进行适当编辑,否则将被关闭。 -
好的,给我几分钟编辑一下
-
顺便问一下,如果由于“站点标准”而没有人可以使用图像附件选项,为什么可以使用它?
-
它适用于非代码的东西。例如,如果您正在开发网站、Java swing 应用程序或 GTK 应用程序或其他任何东西,并且您在开发它时遇到视觉问题,那么您可以嵌入屏幕截图。但不要将它用于代码或其他文本数据,如堆栈跟踪。我已取消投票以结束您的问题,感谢您对其进行编辑。