[英]recursion in java with unexpected output
public class testing
{
public static void printnum(int a)
{
System.out.println( a);
if(a <= 3)
{
System.out.println("recursed");
printnum(a+1);
}
System.out.println( a);
}
public static void main(String...s)
{
printnum(1);
}
}
輸出 :
1
2
3
3
2
1
我希望程序在最后3個結束,但是我不知道下一個“ 2”和“ 1”從何而來? 它如何以及為什么遞減?
您有兩次調用System.out.println(a)
。 如果對它們進行區分,將會發現更容易理解:
public static void printNum(int a)
{
System.out.println("Before recursion: " + a);
if(a <= 3)
{
System.out.println("Recursing");
printNum(a + 1);
}
System.out.println("After recursion: " + a);
}
基本上,您的電話會嵌套-您嵌套最深的電話會顯示:
Before recursion: 4
After recursion: 4
...,然后返回到對printNum(3)
的調用,該命令將打印:
After recursion: 3
並返回對printNum(2)
的調用,該命令將打印
After recursion: 2
等等
現在也將是學習如何使用調試器逐步執行代碼,在每個點查看堆棧等的好時機。
如果您希望它以3結尾,請刪除第二個
System.out.println( a);
您看到的輸出是正確的,並非意外,因為當輸出大於3時,它將返回堆棧調用並以相反的順序打印。
根據代碼,您得到的輸出是正確的。 由於第二個System.out.println("After recursion: " + a);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.