我使用递归来打印数字,直到 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
为什么会这样?
++num
递增num
,这(如此处(使代码更难理解。
请尝试改为拨打rec(num + 1);
。
您可能会发现终止条件需要修改为:
if (num > 2)
终止条件通常是"不执行任何操作"的情况,此处就是这种情况。
当你调用rec(++num);
时,你在打印之前递增num
。因此,当您使用0
作为输入时,到打印时num
将更改为 1
.当num = 2
rec()
开始时,打印不会执行。
rec(0)
打印rec(1),1
rec(1)
打印rec(2),2
rec(2)
不打印任何内容
总产量:2,1
发生这种情况是因为++num
不仅返回num + 1
而且还会像num = num + 1
一样修改num
。
你的 if 语句也是倒退的。
public class Test {
public static void main(String[] args) {
rec(0);
}
private static void rec(int num) {
if (num < 2) {
rec(num + 1);
}
System.out.println(num);
}
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);
之前递增。因此,首先,您检查递归调用的情况。如果条件为假 - 退出递归。并在打印价值时。
当你使用递归时,试着展开嵌套的代码块,这样你就会理解得更简单。