这是我第一次尝试递归,对愚蠢感到抱歉。我试图通过Java计算数字的数字根。我检查过我们可以通过除以9来计算它,但我仍然想使用递归。你能告诉我我在Java中的递归代码有什么问题吗?我该如何解决?你能为我提供示例代码吗?
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
int inputnumber = inputnumber(console);
int sumofdigit = sumofdigit(inputnumber);
int digitalroot = digitalroot(inputnumber);
System.out.println("That number is :" + digitalroot);
}
//input console
public static int inputnumber(Scanner console){
System.out.println("Please input: ");
int num = console.nextInt();
return num;}
public static int digitalroot(int inputnumber ) {
if(inputnumber<10){
return inputnumber;
} else {
return digitalroot(sumofdigit(inputnumber));
}
}
// calculate sum of digits
public static int sumofdigit(int inputnumber){
return sumofdigit(inputnumber/10) + inputnumber%10;
}
答案 0 :(得分:5)
你的递归永远不会结束。使用添加的if
语句尝试此操作:
public static int sumofdigit(int inputnumber) {
if (inputnumber<10)
return inputnumber;
return sumofdigit(inputnumber/10) + inputnumber%10;
}
digitalroot
中有一个simlar代码段,但您主要需要sumofdigit
。
答案 1 :(得分:2)
我会说一旦你达到零就停止递归会稍微容易一点(一个较少的幻数,而且更常见的情况是你可以停止递归为零)。
public static int sumofdigit(int inputnumber) {
if (inputnumber == 0)
return 0;
return sumofdigit(inputnumber / 10) + inputnumber % 10;
}
并不重要,但它至少试图处理负数的总和(虽然返回一个否定的总和)。
答案 2 :(得分:1)
当你的inputnumber小于10时,你的sumofdigit方法应该返回一个结束递归的值
答案 3 :(得分:1)
你的问题在这里:
public static int sumofdigit(int inputnumber){
return sumofdigit(inputnumber/10) + inputnumber%10;
}
要解决这个问题,你应该这样做:
public static int sumofdigit(int inputnumber) {
if (inputnumber<10)
return inputnumber;
return sumofdigit(inputnumber/10) + inputnumber%10;
}
以下是对问题和解决方案的一些解释:
您可能知道,任何递归都可以转换为while循环。您的有问题的递归可以转换为
public static int sumofdigit(int inputnumber) {
while(true){
inputNumber = (inputNumber / 10) + (inputnumber%10);
}
return inputNumber;
}
正如您所看到的,此方法永远不会返回并且将无法正确循环。快速解决方法是在inputnumber<10
public static int sumofdigit(int inputnumber) {
while(inputnumber>=10){
inputNumber = (inputNumber / 10) + (inputnumber%10);
}
return inputNumber;
}
转回递归给出了:
public static int sumofdigit(int inputnumber) {
if (inputnumber<10)
return inputnumber;
return sumofdigit(inputnumber/10) + inputnumber%10;
}
答案 4 :(得分:1)
我不会递归地执行此操作:
public static int sumofdigit(int x) {
int sumofdigit = 0;
while(x != 0) {
sumofdigit += x % 10;
x /= 10;
}
return sumofdigit;
}
public static int digitalRoot(int x) {
while(x > 9) {
x = sumofdigit(x);
}
return x;
}