以下是我到目前为止,但编译器状态方法需要返回BigInteger。
private static BigInteger recSum(BigInteger val, BigInteger moddiv, BigInteger result){
if(moddiv.compareTo(val) == 1){
return result;
}else{
val = val.mod(moddiv);
moddiv = moddiv.multiply(BigInteger.valueOf(10));
result = result.add(recSum(val, moddiv, result));
}
}
我基本上希望通过val将参数传递给此方法,并找到该数字的所有数字的总和。只是为了练习,似乎递归可以在这里工作,反对说将其转换为字符串并将每个字符解析为值并添加。
基本上如果从1524开始,1 + 5 + 2 + 4
写出来我觉得它看起来像这样:
(1524%10)+([1524-(1524%10)]%100)+([1524 - ([1524-(1524%10)]%100)]%1000)...
写出来就像我看到我现在的代码将会停止,但是无论如何也会有一些缺失。
哦,我想如果我的代码可行,它可能会像
那样1000 + 500 + 20 + 4
我可以轻松地重新排列事物并按照moddiv进行划分,然后将其增加到下一个幂。事情在某种程度上它并没有返回BigInteger。
有什么建议吗?
答案 0 :(得分:1)
您的函数没有return语句是else
子句。您也应该返回result
。
或者更好的是,重新安排代码以获得单个return语句:
private static BigInteger recSum (BigInteger val, BigInteger moddiv, BigInteger result)
{
if (moddiv.compareTo(val) != 1){
val = val.mod(moddiv);
moddiv = moddiv.multiply(BigInteger.valueOf(10));
result = result.add(recSum(val, moddiv, result));
}
return result;
}
答案 1 :(得分:0)
您忘记了return
声明:
private static BigInteger recSum(BigInteger val, BigInteger moddiv, BigInteger result){
if(moddiv.compareTo(val) == 1){
return result;
}else{
val = val.mod(moddiv);
moddiv = moddiv.multiply(BigInteger.valueOf(10));
result = result.add(recSum(val, moddiv, result));
return result; // <-- need return statement here
}
}