如何用Java评估递归函数?

Viv*_*rek 0 java

我是Java的新手,下面的代码计算a ^ b,我已经在计算机上对其进行了编译,并且工作正常。但是我不明白它是如何工作的?java编译器如何计算a * power(a, b - 1)有人可以向我解释此代码吗?

int power(int a, int b) {
    if (b < 0) {
        return 0;
    } else if (b == 0) {
        return 1;
    } else {
        return a * power(a, b - 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

mar*_*ran 8

您的函数是递归的。用示例演示它的工作方式可能是最简单的。

假设您要计算2 ^ 4。因此,您致电power(2, 4);

这是评估方式(请注意,您弄错了基本情况):

power(2, 4) // b > 0, so it expands.
2 * power(2, 3)
2 * (2 * power(2, 2))
2 * (2 * (2 * power(2, 1)))
2 * (2 * (2 * (2 * power(2, 0)))) // Now, b == 0, so it evaluates to -1 
2 * (2 * (2 * (2 * -1)))
2 * (2 * (2 * -2))
2 * (2 * -4)
2 * -8
-16
Run Code Online (Sandbox Code Playgroud)