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;

   } 
4

2 に答える 2

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); 
}
于 2013-10-01T07:17:05.193 に答える
2

while ループを末尾の再帰に置き換えるのは非常に簡単です。再帰には、一般的なケースと基本的なケースの 2 つが必要です。基本ケースは通常より簡単なので、それから始めるのが最善です。このプログラムが取得できる最も単純な入力は何ですか? 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);
}

そして、あなたは完了です!

于 2013-10-01T07:14:08.783 に答える