2017-04-05 170 views
-3

我忙於學習java中的遞歸,並且很難理解它在大多數情況下的工作原理。我有一個示例程序從書,這是他們要求你發現如果n = 3的輸出:爲什麼這個遞歸程序給我這個輸出?

public void printX(int n){ 

    if(n <= 0) 
     System.out.print(0); 
    else{ 
     printX(n-1); 
     System.out.print(n); 
     printX(n - 2); 

    } 
} 

我認爲結果將是「231」。然而,在Eclipse中輸入代碼並運行該程序後,結果顯示代碼爲「010203010」。

有人能幫助我理解爲什麼這是輸出而不是我的想法?

+0

那麼當'n-1'或'n-2'小於或等於'0'時,您不會阻止發生調用... –

+6

瞭解您首先需要了解遞歸的遞歸 – Eugene

+0

您是否已經教授關於樹結構和深度優先? – CraigR8806

回答

2

瞭解此行爲的最佳方法是逐行逐行;你可以用調試器來做到這一點。

簡短的回答:你認爲它會先打印2,因爲當n是3時,它所做的第一件事就是致電printX(n-1)printX(2)。但是當n2,它有什麼作用?只打印2?不...它首先調用printX(n-1),這個時間意味着printX(1)。等

-1

請重寫代碼如下:

public void printX(int n){ 

    if(n >0) 
     System.out.print(n); 
     n--; 
     printX(n) 
    else{ 

     System.out.print(n); 

     } 
} 
+3

這並不回答這個問題。 – Guy

+0

問題是爲了幫助他理解,這段代碼應該做一下。 – Shadov

+0

由於OP不理解遞歸,因此編輯問題以添加解釋會有所幫助。 – Lexi

-1

enter image description here

我認爲它的解決方案是像this.When X < = 0那麼打印0,它想達到printX( 0)之前它會打印數字,所以在我發送的圖片中,您可以按照先打印哪些數字。正如前面所述,將0代替printX(x),其中x小於或等於0.

0

這裏要提到的是,調用的樂趣ction將在之後始終完成的被調用函數。調用函數每次調用printX時,暫停並等待被調用的函數完成後再繼續執行。考慮它的一種方式是它是彼此嵌套功能的手段。

相關問題