Java递归和局部变量
在下面的方法中,有两个整数,Java递归和局部变量,java,variables,recursion,methods,Java,Variables,Recursion,Methods,在下面的方法中,有两个整数,base和n 当powerN(base,n-1)*base发生时,具体发生了什么 只有base相乘,但是方法中有两个局部变量,那么为什么n-1和base都不相乘,因为它们都是方法的一部分 (如果这是一个新手问题,很抱歉,但我似乎无法理解这个概念。) 以下是示例值的操作顺序: base = 3, n = 4 Is 4 == 0? No powerN(3, 3) * 3 base = 3, n = 3 Is 3 == 0? No powerN(3, 2)
base
和n
当powerN(base,n-1)*base发生时,具体发生了什么
只有base
相乘,但是方法中有两个局部变量,那么为什么n-1
和base
都不相乘,因为它们都是方法的一部分
(如果这是一个新手问题,很抱歉,但我似乎无法理解这个概念。)
以下是示例值的操作顺序:
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
,以下是示例值的操作顺序:
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
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
}
递归使得真正的问题更难理解。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
}
递归使我们更难看到真正的问题