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