现在,我正在经历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]的赋值前