Java If/else语句显示
我有这个问题,, 1) 运行以下程序时显示的内容:Java If/else语句显示,java,computer-science,Java,Computer Science,我有这个问题,, 1) 运行以下程序时显示的内容: class Q1 { public static void main(String[] args) { r(3); } public static void r(int x) { if (x == 1) { System.out.println("hello");
class Q1
{
public static void main(String[] args)
{
r(3);
}
public static void r(int x)
{
if (x == 1)
{
System.out.println("hello");
r(10);
}
else
if (x == 9)
System.out.println("bye");
else
{
System.out.println("good");
r(x-1);
System.out.println("bad");
}
}
}
按照我的逻辑,结果是
good
good
hello
good
bye
但答案是
good
good
hello
good
bye
bad
bad
bad
为什么那些糟糕的底线会出现?
当最后一个r(9)被分配给x时,程序遇到if(x==9)语句,所以它应该停止,这就是我的想法
请帮我弄清楚这里的流程和逻辑!
我很困惑…您缺少程序执行的某些部分,当r为3、2和10时,程序打印“good”,然后分别递归调用r(2)、r(1)和r(9)。但是,还有一条语句,当被调用的递归函数完成其工作并返回到调用方法时,最终将执行该语句。当r分别为10、2和3时,该部分将按该顺序打印“坏” 在else块中:
else{
System.out.println("good");
r(x-1);
System.out.println("bad");
}
即使是递归调用r(x-1),该方法中也没有任何内容会退出程序或阻止r()方法完成,并阻止打印“坏”的下一行运行。您是递归调用r()。在第一次迭代中,您将进入最后一次迭代,您可以:
r(3);
由于x不等于1或9,程序打印“good”并调用r(2)
同样的逻辑再次发生,因此程序打印“good”并调用r(1)
在函数调用r(1)中;x=1,因此程序打印“hello”并调用r(10)
对于r(10),与第一个r(3)和r(2)的逻辑相同,因此程序打印“good”并调用r(9)
当调用r(9)时,程序打印“bye”而不调用r(x)
此时,程序从调用r(x)的点继续
在3次调用r(x)时,x不等于9或1。因此程序会打印“bad”3次。您的r(x)方法调用:
argument| x=1 | x=9 | other
--------+--------+------+--------------
code | hello | bye | good
| r(10) | | r(x-1)
| | | bad
所以你的调用看起来像
r(3)代码>
其中r(2)代码>调用:
good
r(1); //because r(2-1)
bad
hello
r(10);
good
r(9); //because r(10-1)
bad
bye
其中r(1)代码>调用:
good
r(1); //because r(2-1)
bad
hello
r(10);
good
r(9); //because r(10-1)
bad
bye
其中r(10)代码>调用:
good
r(1); //because r(2-1)
bad
hello
r(10);
good
r(9); //because r(10-1)
bad
bye
其中r(9)代码>调用:
good
r(1); //because r(2-1)
bad
hello
r(10);
good
r(9); //because r(10-1)
bad
bye
如果你把这些放进窝里,你会得到的
r(3){
good
r(2){
good
r(1){
hello
r(10){
good
r(9){
bye
}
bad
}
}
bad
}
bad
}
由此产生:
(from)
good r(3)
good r(2)
hello r(1)
good r(10)
bye r(9)
bad r(10)
bad r(2)
bad r(3)
非常感谢。现在,我明白了。