2013-03-25 115 views
-2

我開始學習遞歸以及如何使用它來解決問題。瞭解簡單的遞歸方法

問題是,該方法調用重複(4)顯示什麼?

public static void recur (int n) 
{ 
    if(n==1) 
    { 
    System.out.print(n); 
    } 
    else 
    { 
    System.out.print(n); 
    recur(n - 1); 
    } 
} 

因爲n不等於1時,它會再次發生(N - 1),但是這是我很困惑,這裏是什麼情況?輸出是沿着3,2,1,0的線嗎?

+6

你就不能調用'復發(4)'親眼看看? – SudoRahul 2013-03-25 03:26:47

+0

正如@ R.J指出的那樣,甚至更好,在運行時使用調試器遍歷代碼。 – 2013-03-25 03:27:16

+0

爲什麼不運行程序並檢查輸出的方式?乍一看,輸出應該是4 3 2 1 – 2013-03-25 03:27:42

回答

1

它將打印:4321

如果你打電話recur(4),那麼當你開始時,n == 4。它不是1,所以它轉到else塊,在那裏它打印一個4,然後調用recur(3)(4-1 = 3)。之後,它仍然不是1,所以你再次去到else塊。這次n == 3,所以3打印出來。然後調用recur(2),它再次進入else塊,打印出2並調用recur(1)。現在n等於1,所以if塊被執行,它只是打印1.

請注意,你得到4321,因爲你有一個System.out.print()語句,沒有空格。一個println()會把它放在一個新行,每次,你會得到:

4 
3 
2 
1 

但是隨着print()語句,並沒有間距,你會簡單地得到4321

+0

謝謝,想知道這個,而不是隻是「插入」 – aiuna 2013-03-25 03:31:48

+0

@aiuna不客氣。但是,如果您使用斷點並在執行過程中看到這些值發生更改,那麼對您而言就會更清楚。 – 2013-03-25 03:33:31