2013-03-14 192 views
1

程序顯示的結果「5」,但我看不出它是如何獲取到這個問題的答案,因爲那進行的「+1」,「結果謎(N/20)+ 1」爲什麼這種遞歸方法的功能是這樣的?

燦任何人都可以通過計算機採取的邏輯步驟來獲取此信息?

public class Experimental{ 

    public static int mystery(int n){ 
     if (n <= 0) { return 0; } 
     return mystery(n/2) + 1; 
     }//ends method 

public static void main(String[] args){ 
    System.out.println(mystery(20)); 
}//ends method 
}//ends class 
+0

20,10,5,2,1,0。 – nneonneo 2013-03-14 21:20:55

+0

到目前爲止,我只將它看作是(n/2)部分。它一直在減半,直到最終達到0,但是什麼時候「+1」才起作用? – 2013-03-14 21:33:26

回答

1

這是一個遞歸調用。它在n等於零時結束(它永遠不會變爲負數)。它需要2個5格來達到零。要做的最好的事情就是拿一張紙,看看這是怎麼展開的。

mystery(20/2) + 1 = 
(mystery(20/2/2) + 1) + 1 = 
((mystery(20/2/2/2) + 1) + 1) + 1 = 
(((mystery(20/2/2/2/2) + 1) + 1) + 1) + 1 = 
((((mystery(20/2/2/2/2/2) + 1) + 1) + 1) + 1) + 1 = 
0 + 1 + 1 + 1 + 1 + 1 = 5 

希望這會有所幫助。計算機在遞歸方面比人類好得多...

+0

完美。不久,當我解鎖這個能力時,你就會得到滿意的結果。 – 2013-03-14 21:35:37

+0

你也可以接受答案;) – 2013-03-14 21:48:16

0

是的!事實上,一個調試器如gdb可以讓你通過計算機採取的邏輯步驟。

  1. -g標誌編譯程序。
  2. 運行gdb a.out(或您的程序名稱)。
  3. Google gdb cheatsheet瞭解如何設置斷點並逐步執行代碼。
+0

這裏總是新手,我該如何編譯一個帶有「-g標誌」的程序?那是什麼?我該如何去做第二步? – 2013-03-14 21:26:28