簡體   English   中英

此代碼如何工作(簡單的Java遞歸)?

[英]How does this code work(simple java recursion)?

我在理解遞歸時遇到了麻煩。 我了解理論。 就像當一個函數調用自身時一樣,需要一個基本的情況來結束遞歸,而在程序中使用它時,一切都讓我感到困惑。 例如,我在下面發布了一些代碼。 當我在遞歸函數之前調用print函數..它以相反的順序打印數字(54321),而在遞歸之后調用它時,它將打印為12345。為什么?

public class Main {

    public static void main(String[] args) {

        printNumbers(5);
    }

    public static void printNumbers(int num){
        if(num==0) {
            return;
        }
       System.out.println(num); // this prints 54321

        printNumbers(num-1);
       System.out.println(num);//this prints 12345

    }
}

在這里,“桌面檢查”(筆和紙)之類的東西非常方便,因此您可以逐步執行代碼並在每個步驟中描述狀態。

本質上,直到printNumbers方法返回時才調用第二條打印語句,這意味着您的執行類似於...

printNumber(5)
    num = 5
    num == 0 = false
    print num (5)
    printNumbers(num - 1)
        num = 4
        num == 0 = false
        print num (4)
        printNumbers(num - 1)
            num = 3
            num == 0 = false
            print num (3)
            printNumbers(num - 1)
                num = 2
                num == 0 = false
                print num (2)
                printNumbers(num - 1)
                    num = 1
                    num == 0 = false
                    print num (1)
                    printNumbers(num - 1)
                        num = 0
                        num == 0 = true (return)
                    print num (1)
                print num (2)
            print num (3)
        print num (4)
    print num (5)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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