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命令时得到了它!对不起,这是个愚蠢的问题:(