2013-10-01 58 views
0

這是迄今爲止,它的工作原理,但它不是遞歸的。任何想法如何將其轉換爲遞歸遞歸布爾方法檢查整數是否可整除

public static boolean isDivide(int n) 
    { 
    if (n < 10) System.out.println (n); 
    int sum = 0; 
    while (n > 0) 
    { 
    sum += n % 10; 
    n = n/10; 
    } 
    while (sum >= 0) 
    { 
    sum -=3; 
    } 
    //System.out.println(n==0); 
    return n==0; 

    } 
+0

計算總和 –

+3

時,您也有模操作好像你在這裏失蹤的數學基礎 - 當且僅當其數字的總和可被3整除時,數字才能被3整除。可以遞歸地應用該邏輯。 –

+1

請使用閉包......和'if(codition);'對分號不起作用 –

回答

4
public static boolean isDivisibleBy3(int n) 
{ 
    if(n == 0) return true; 
    if(n < 0) return false; 
    return isDivisibleBy3(n - 3); 
} 

對於n> = 0 如果您需要檢查負數:

public static boolean isDivisibleBy3(int n) { 
    if(n == 0) return true; 
    if(n == -1 || n == -2 || n == 1 || n == 2) return false; 
    if (n < 0) return isDivisibleBy3(n + 3); 
    else return isDivisibleBy3(n - 3); 
} 
+0

現在對我有意義! – user2314520

+0

你運行過這個程序嗎?上次編輯? –

+0

你的代碼中給出的返回語句丟失錯誤。 –

2

用尾部遞歸替換while循環是相當容易的。對於遞歸,您需要兩件事:一般情況和基本情況。基本情況通常比較容易,所以最好從頭開始。這個程序可以獲得的最簡單的輸入是什麼?這是0-3。所以這裏的基本情況:

public static boolean isDivide(int n) 
{ 
    if(n==0||n==3) 
     return true; 
    else if(n==1||n==2) 
     return false; 

爲此,一般情況下也很容易。對於任何可以被3整除的n,n-3也是如此。所以我們可以在n-3上調用相同的函數。

else 
     return isDivide(n-3); 
} 

你完成了!