递归布尔方法,检查整数是否可以整除

时间:2013-10-01 07:05:08

标签: java recursion

这是我到目前为止,它的工作原理,但它不是递归的。任何想法如何将其转换为递归

   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;

   } 

2 个答案:

答案 0 :(得分: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); 
}

答案 1 :(得分: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);
}

你已经完成了!