DRoot dRoot = new DRoot();
System.out.println("Answer from main : " + dRoot.digital_root(493193));
数字根是数字中所有数字的递归和。给定n,取n的数字之和。如果该值有两位数,则以这种方式继续减少,直到产生一位数字。这仅适用于自然数。
public class DRoot {
public static int digital_root(int num)
{
String temp = Integer.toString(num);
int a[] = new int[temp.length()];
int output = 0;
for(int i = 0; i < temp.length(); i++) //getting individual numbers from passed in integer
{
a[i] = Integer.parseInt(temp.substring(i, i+1));
}
for (int i = 0; i < a.length; i++) //sum of all digits in the number
{
output += a[i];
}
if(String.valueOf(output).length() != 1)
{
digital_root(output);
} else {
return output;
}
return 0;
}
}
正如您在上面所看到的,我试图通过if else语句返回单个数字,该语句测试&#34;如果输出值不等于1则返回digital_root(output);
&#34;但是,这个返回不起作用,而是从返回的返回0返回0,我放在那里以清除返回错误。有什么帮助解决这个问题?感谢
答案 0 :(得分:2)
更改此行
digital_root(output);
至
return digital_root(output);
还可以进行其他优化
答案 1 :(得分:0)
if(String.valueOf(output).length() != 1)
{
return digital_root(output);
} else {
return output;
}
答案 2 :(得分:0)
这是因为你在if条件下进行递归调用并覆盖输出变量。
例如,如果将输入1234传递给函数,则在第一次调用期间输出将为10,并且当长度不等于1时,它将再次进行递归调用并将其转换为1并返回它,但是没有收集它返回的1,因为方法调用结束了递归调用期间输出中的值丢失。因此,如果它将转到最后一个语句并返回0
,则输出将仍为10并且已经执行所以更好的解决方案是使用变量来收集结果
int result = 0;
if(String.valueOf(output).length() != 1)
{
result = digital_root(output);
} else {
result = output;
}
return result;