簡體   English   中英

該遞歸方法如何打印3次而不僅僅是退出?

[英]How does this recursive method print 3 times instead of just exiting?

public static void foo(int n) {

    if(n > 0) {
        if(n % 2 == 0) {
            foo(n - 3); 
        } else {
            foo(n - 1); 
        }
    }

    System.out.println(n); 
}

我在這里不了解遞歸方法。 我知道它將如何顯示-1,但是我不明白它將如何顯示“ -1 2 3”。 任何幫助,將不勝感激。

該方法由foo(3)調用

這是過程。

foo(3) --> foo(2)
//because  (3 % 2 != 0)

foo(2) --> foo(-1)
//because  (2 % 2 == 0)

foo(-1) --> print -1
//because (-1 < 0)  
//goes back & continue from last point where this method is called

print 2, then exit method
//goes back & continue from last point where this method is called

print 3, then exit method
//goes back & continue from last point where this method is called

back to main()

我做到了,我使用pythontutor.com對其進行了可視化,但是我不明白為什么它在打印-1之后返回“ n%2”行

它仍然繼續打印,因為在打印-1 ,即使它退出了打印-1的方法,但它仍返回並從調用foo(-1)的位置繼續。 它從那里繼續。

遞歸方法通過自身請求相同的方法而繼續工作。 在您的代碼中,當您請求foo (3);

時間1: 3%2=1因此這將要求ELSE部分然后foo (3-1) = foo (2); 將被稱為。 時間2: 2%2=0因此這將請求IF部分,然后將調用foo (2-3) = foo (-1) 時間3: -1 > 0 = False因此將調用Print Method。

系統將打印-1 時間3功能將結束並進入時間2功能

系統將打印2時間2功能將結束並進入時間1功能

系統將打印3

所以輸出-1 2 3

暫無
暫無

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

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