Java递归和局部变量

Hen*_*y98 1 java variables methods recursion

因此,在下面的方法中,有两个整数base和n。

什么时候powerN(base, n-1) * base发生,到底发生了什么?

只有basegets 相乘,但方法内有两个局部变量,那么为什么 和 get 不都n-1乘以base基数,因为它们都是方法的一部分?

(抱歉,如果这是一个新问题,但我似乎无法理解这个概念。)

public int powerN(int base, int n)
{
    if (n == 0) {
       return 1;
    } else {
       return (powerN(base, n-1) * base); 
    }
}
Run Code Online (Sandbox Code Playgroud)

rge*_*man 5

以下是示例值的运算顺序:

base = 3, n = 4
Is 4 == 0? No
powerN(3, 3) * 3
    base = 3, n = 3
    Is 3 == 0? No
powerN(3, 2) * 3 * 3
        base = 3, n = 2
        Is 2 == 0? No
powerN(3, 1) * 3 * 3 * 3
            base = 3, n = 1
            Is 1 == 0? No
powerN(3, 0) * 3 * 3 * 3 * 3
                base = 3, n = 0
                Is 0 >= 0? Yes, return 1.  // Base Case
1 * 3 * 3 * 3 * 3
81
Run Code Online (Sandbox Code Playgroud)

确实powerN(base, n - 1)会乘以base,但直到递归调用返回为止。基本情况(嵌套最深的调用)1首先返回。然后发生乘法,每次递归调用一次,递归调用依次返回3, 9, ,原始调用返回。2781