现在,我正在经历Codecademy的递归过程,并且困惑如何解释此正确的代码。

// Create an empty array called "stack"
var stack = []
// Here is our recursive function
function power(base, exponent) {
  // Base case
  if ( exponent === 0 ) {
    return 1;
  }
  // Recursive case
  else {
    stack[exponent-1] = base * power(base, exponent - 1); //confused by start of this line
    return stack[exponent-1];
  }
}
power(3,3)
console.log(stack) // [3,9,27]


如果指数1变为2,则1变为0,为什么3成为元素在数组的第0个位置而不是在第2个位置(依此类推)?

我真的很感谢您的帮助。

最佳答案

在第一遍中,指数为3,因此您将在堆栈[2]中存储一个值。但是直到使用power(3,2)... power(3,1)完成递归调用后,才计算该值。

因此,在堆栈[3-1]的赋值之前是堆栈[3-2]的赋值,而堆栈[3-2]则是赋值在堆栈[3-2]的赋值前

10-07 22:13