Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/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 - Fatal编程技术网

Java 为什么在递归方法中输出会发生变化?

Java 为什么在递归方法中输出会发生变化?,java,Java,我创建了一个简单的递归方法,如下所示: public void rec(int a) { if(a > 0) { rec(a - 1); System.out.println(a); } } 此方法的输出为: 1 2 3 4 5 这很好,但问题是为什么当我在if语句外编写print命令时,输出从0开始,而不是从1开始 public void rec(int a) { if(a > 0) { rec(a -

我创建了一个简单的递归方法,如下所示:

public void rec(int a) {
    if(a > 0) {
        rec(a - 1); 
        System.out.println(a);
    }
}
此方法的输出为:

1
2
3
4
5
这很好,但问题是为什么当我在if语句外编写print命令时,输出从0开始,而不是从1开始

public void rec(int a) {
    if(a > 0) {
        rec(a - 1);
    }
    System.out.println(a);
}
为什么在if语句外部写入print命令时,输出从0开始,而不是从1开始

public void rec(int a) {
    if(a > 0) {
        rec(a - 1);
    }
    System.out.println(a);
}
因为在第一个版本中,
if(a>0)
阻止函数打印
0
。我们来看看这里发生了什么,包括两张照片:

public void rec ( int a) {
        
    if(a>0) {
        rec(a-1);
        System.out.println("Inside if: " + a);
    }
    System.out.println("After if: " + a);
}
在代码中

    public void rec(int a) {
     if(a > 0) {
       rec(a - 1); 
       System.out.println(a);
     }
    }
对于第一次方法调用,递归调用方法rec(),参数值为“a”,然后对于所有后续方法调用,参数值为“a-1”。
rec()方法具有if子句,该子句仅在收到的参数“a”的值大于0时执行

如果“a”的值为0,那么该方法什么也不做,返回调用点,并在该方法范围内打印变量a的值

重要的一点是,方法作用域中“a”的值没有被更改,只有下一个方法调用的参数被更改(即a-1)

假设初始方法调用类似于

    rec(5) // <-- method invoked with a = 5

    //method definition
    public void rec(int a) { // <-- a = 5
      if(a > 0) { //  5 > 0 ? True
        rec(a - 1); // rec(5-1) ie rec(4) but a = 5 still
        System.out.println(a); // <-- a = 5 in this method scope
      }
    }
rec(5)//0?真的
记录(a-1);//rec(5-1)即rec(4)但a=5

系统输出打印ln(a);//如何调用该方法?if语句没有执行
0
的print语句,因为您有
if(a>0
)!如果(a>0),当它为零时表示不为真。。。当你把System.out.println放在if条件之外时,不管if条件如何,它都会打印。jimizv我通过从类中创建一个对象来调用它,因为它在另一个类中。噢,我想我现在在if条件之前键入print命令时得到了它!对不起,这是个愚蠢的问题:(