Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java递归和局部变量_Java_Variables_Recursion_Methods - Fatal编程技术网

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
}
递归使我们更难看到真正的问题