以下是我到目前为止所拥有的,但是编译器声明方法需要返回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;
}

09-25 20:59