因此,在以下方法中,有两个整数base
和n
。
当powerN(base, n-1) * base
发生时,究竟会发生什么?
只有base
成倍增加,但方法中有两个局部变量,那么为什么n-1
和base
都不会乘以基数,因为它们都是方法的一部分?
(对不起,如果这是一个新的问题,但我似乎无法掌握这个概念。)
public int powerN(int base, int n)
{
if (n == 0) {
return 1;
} else {
return (powerN(base, n-1) * base);
}
}
答案 0 :(得分:4)
以下是示例值的操作顺序:
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
powerN(base, n - 1)
确实乘以base
,但直到该递归调用返回为止。基础案例,最深层嵌套的调用,首先返回1
。然后乘法发生,每次递归调用一次,递归调用依次返回3
,9
,27
,原始调用返回81
。
答案 1 :(得分:0)
Java是按值传递的。当你调用powerN()时,它不引用局部变量,它会复制。请考虑以下代码:
public func( int x ) {
x = x + 1;
}
public void test() {
int x = 1;
func( x );
System.out.println( x ); // x = 1, not 2
}
递归使得更难以看到真正的问题。