在Java BigInteger中递归添加数字

时间:2014-08-21 17:58:31

标签: java recursion biginteger

以下是我到目前为止,但编译器状态方法需要返回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。

有什么建议吗?

2 个答案:

答案 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
    }
}