这是我到目前为止,它的工作原理,但它不是递归的。任何想法如何将其转换为递归
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 :(得分: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);
}
你已经完成了!