2011-04-24 127 views
1

我碰到過這種方法,瀏覽網頁搜索遞歸方法。 相信我,我不能得到它的邏輯。基本上這種方法可以找到給定數量的密碼數量。幫助理解數學遞歸方法

public int aantalCijfers(int n) 
{ 
    if (n < 10) 
    { 
     return 1; 
    } 
    else if ((n > 9) && (n < 100)) 
    { 
     return 2; 
    } 
    else 
    { 
     return (aantalCijfers(n/100) + 2); 
    } 
} 

讓我們來舉個例子。讓我們想象一下,我們使用5000爲參數,我的結論是,如下面的步驟:

    (由其他人,如果自52語句是9 & 100之間返回)

但是,它返回4,它工作正常,而我期待它不會。 你可以請,如果你弄清楚它是如何工作的,指出這個方法如何得出正確結論的步驟?

回答

5

當然。 :-)但首先請注意功能說aantalCijfers(n/100) + 2,不是aantalCijfers(n/100 + 2)。我有一種感覺,你可能誤解了這一點。

基本情況是1或2位數字。對於除此之外的任何內容,除以100(因此去掉兩位數字),重新計算,並將結果加2。

使用5000爲你的例子:

  1. digits(5000)
  2. digits(50) + 2
  3. 2 + 2
  4. 4

您可以在進一步擴展。讓我們,說用1000000

  1. digits(1000000)
  2. digits(10000) + 2
  3. digits(100) + 2 + 2
  4. digits(1) + 2 + 2 + 2
  5. 1 + 2 + 2 + 2
  6. 7
+0

Thx,的確,我確實缺少前兩行。謝謝 – JBoy 2011-04-24 07:44:44

1

它相當straig htforward

  • 一個數字可以達到一百(大於9)有兩位數字。
  • 因此,除以100將使您的計數增加2位數。
  • 您再次調用該函數,並檢查其餘的,則它不斷走,直到出口條件之一,高達10或10至99
1

aantalCijfers(5000) 

returns (aantalCijfers(50) which returns 2) + 2 = 4 
1

你在第二步誤認爲是f(50)+2,而不是50 + 2。 和f(50)是第二個if,它返回2,所以它是2 + 2,這將產生4.