当我为n=5运行这段代码时,我得到的输出是"5 3 1 1 3 5“,我得到了5 3 1部分,但在那之后,n=-1,但是当我使用调试器运行代码时,当n=-1时,它会转到numbers(n-2);i.e System.out.prt(n+ "");之后的行,即使该语句包含在if块中。
这一切为什么要发生?
public void numbers(int n)
{
if(n>0)
{
System.out.print(n+" ");
numbers(n-2);
System.out.print(n+" ");
}
}TLDR :当n=-1 System.out.prt(n+ "");时,即使它在if块中,它只在n>0时运行。
任何帮助都将不胜感激。提前感谢!
发布于 2016-01-11 16:05:28
下面是幕后发生的事情,对于n == 5
numbers(5);
if(5 > 0)--> true :
System.out.print(5 + " "); // (1)
numbers(3);
| if(3 > 0)--> true :
| System.out.print(3 + " "); // (2)
| numbers(1);
| | if(1 > 0)--> true :
| | System.out.print(1 + " "); // (3)
| | numbers(-1);
| | System.out.print(1 + " "); // (4)
| System.out.print(3 + " "); // (5)
System.out.print(5 + " "); // (6)注意每个数字应该如何被打印两次:
System.out.print(n + " "); // print once
numbers(n-2);
System.out.print(n + " "); // print twice发布于 2016-01-11 16:03:06
删除最后的System.out.print(n+“");在递归数字调用之后,它返回n的原始值,并再次打印这个值。
它从最深的层次返回,打印1次,直到第3次的调用,再次打印,同时5也被再次打印。
如果希望它在第一次打印后更新该值,则必须执行n-=2而不是n-2来更新变量n。
发布于 2016-01-11 16:06:05
5 first system.out then number(5-2)
|
----> 3 first system.out then number(5-2)
|
----->1 first system.out then number(5-2)
(smaller than 0) , returning
|
1 second system.out
|
3<---- second system.out
|
5<--------- second system.outhttps://stackoverflow.com/questions/34725881
复制相似问题