我正在使用递归来打印数字直到2(数字),并且我将零(0)作为输入并递归调用它直到数字达到2。 我已经试过了这段代码,它显示了正确的输出。
class Test{
public static void main(String[] args) {
rec(0);
}
private static void rec(int num){
if(num<=2){
rec(++num);
}
System.out.println(num);
}
}
但是我想通过以下方式做到这一点。
class Test{
public static void main(String[] args) {
rec(0);
}
private static void rec(int num){
if(num==2){
return;
}
rec(++num);
System.out.println(num);
}
}
预期输出:
2,1,0
但它显示:
2,1
为什么会发生?
答案 0 :(得分:2)
++num
以num
递增,这使得代码更难理解。
尝试致电rec(num + 1);
。
您可能会发现终止条件需要修改为:
if (num > 2)
终止条件通常是“不执行任何操作”的情况,这里就是这种情况。
答案 1 :(得分:2)
呼叫rec(++num);
时,您要先递增num
,然后再打印出来。因此,当您使用0
作为输入时,到打印时num
将会更改为1
。当num = 2
开头的rec()
时,打印不执行。
rec(0)
打印rec(1),1
rec(1)
打印rec(2),2
rec(2)
什么也不打印
总输出:2,1
答案 2 :(得分:1)
发生这种情况是因为glm model
不仅返回了++num
,而且还像num + 1
一样修改了num
。
您的if语句也向后。
num = num + 1
答案 3 :(得分:0)
class Test {
public static void main(String[] args) {
rec(0);
}
private static void rec(int num){
if(num <= 2){
rec(num + 1);
} else return;
System.out.println(num);
}
}
++num
-前缀递增,表示在调用System.out.println(num);
之前递增。因此,首先,您检查递归调用的情况。如果条件为假-退出递归。并在印刷时增值。
在使用递归时,请尝试扩展嵌套的代码块,以使您更容易理解。