所以我们有这段代码,它使用递归函数生成数组,然后是另一个递归函数,它将数组中的所有数字相乘,就像factorial一样。我不明白的是这部分stack[x - 1] = int * stack[x - 1];
在这种情况下究竟stack[x - 1]
到底是什么?如果每次函数调用自身,它.pop()是数组中的最后一个元素,这意味着每次数组的长度变短,直到我们达到基本情况x === 0
,那么为什么我们必须手动从它的长度减去-1无论如何?感谢。
var stack = [];
function countDown(int) {
stack.push(int);
if (int === 1) {
return 1;
}
return countDown(int - 1);
}
function multiplyEach() {
// Remove the last value of the stack
// and assign it to the variable int
int = stack.pop();
x = stack.length;
// Base case
if (x === 0) {
return int;
}
// Recursive case
else {
stack[x - 1] = int * stack[x - 1];
return multiplyEach();
}
}
// Call the function countDown(7)
countDown(7);
// And then print out the value returned by multiplyEach()
console.log(multiplyEach());
答案 0 :(得分:2)
因为我们所说的索引不是长度,索引是从0开始的。
假设我们有以下数组:
var a = [333, 555];
它的长度是2.但是它的项目是0和1.因此,如果您根据它的长度进行查看,您有两个选项:一个以-1长度开头的var或在每个元素上使用-1索引。 / p> 希望我澄清一下。