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 循环非常容易。对于递归,您需要两件事:一般情况和基本情况。基本情况通常更容易,所以最好从它开始。这个程序可以得到的最简单的输入是什么?这是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 回答