0

我目前正在学习 Javascript 中的递归函数,并且在大多数情况下我了解递归是什么以及如何使用它,但我有一个问题:为什么我需要“为什么我需要在'之后添加 [exponent - 1]堆'?” 这是代码:

var stack = [];

// Here is our recursive function
function power(base, exponent) {
    // Base case 
    if ( exponent === 0 ) {
        return 1;
    }
    // Recursive case
    else {
        //Why do I need [exponent - 1]?
        **stack[exponent - 1] = base * power(base, exponent - 1)**;
        return stack[exponent - 1];
    }
}
4

3 回答 3

1

你真的不需要它,试试:

var stack = [];

function power(base, exponent) {
    // Base case 
    if ( exponent === 0 ) {
        return 1;
    }
    // Recursive case
    else {
        //[exponent] instead of [exponent - 1]
        stack[exponent] = base * power(base, exponent - 1);
        return stack[exponent];
    }
}

但是,堆栈会有一个未定义的索引,因此您可以尝试

var stack = [];

function power(base, exponent) {
    // Base case 
    if ( exponent === 0 ) {
       stack[0] = 1;
    }
    // Recursive case
    else {
        //[exponent] instead of [exponent - 1]
        stack[exponent] = base * power(base, exponent - 1);
    }
    return stack[exponent];
}
alert(power(2,3));
alert(stack);
// stack is now [1, 2, 4, 8]
于 2013-04-13T18:58:16.717 回答
1

这是因为

power(any_number, 0) = 1, (constant)

stack[0] = power(any_number, 0) = 1,
stack[1] = any_number * stack[0],
stack[2] = any_number * stack[1],
stack[3] = any_number * stack[2],
...

这就是 power() 函数在数学中的工作原理。数到零的幂 (n^0) = 1,接下来每个幂在幂之前乘以基数一倍。

你明白?

编辑

回答您的评论,您几乎从您所写的内容中理解了。

就像这样:

n^0 = 1
n^1 = n * n^0 = n * 1
n^2 = n * n^1 = n * n * 1
n^3 = n * n^2 = n * n * n * 1
n^4 = n * n^3 = n * n * n * n * 1
...

每个下一个都是n * previous(//递归案例)

除了 n^0 始终等于 1 并结束此函数外。(// 基本情况)

现在更清楚了吗?

于 2013-04-13T01:44:33.927 回答
1

数组从 索引[0, length - 1]。如果我们没有减去 0,那么 的第一个元素stack将为空。exponent在这种情况下将始终大于 0 else

于 2013-04-13T18:39:18.670 回答