请解释一下这个递归函数

时间:2017-03-20 14:13:02

标签: javascript arrays recursion

所以我们有这段代码,它使用递归函数生成数组,然后是另一个递归函数,它将数组中的所有数字相乘,就像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());

1 个答案:

答案 0 :(得分:2)

因为我们所说的索引不是长度,索引是从0开始的。

假设我们有以下数组:

var a = [333, 555];

它的长度是2.但是它的项目是0和1.因此,如果您根据它的长度进行查看,您有两个选项:一个以-1长度开头的var或在每个元素上使用-1索引。 / p> 希望我澄清一下。