以下是我到目前为止所拥有的,但是编译器声明方法需要返回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。
有什么建议吗?
最佳答案
您的函数没有返回语句的是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;
}