簡體   English   中英

Java中的遞歸與意外的輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM