双位数递归解释

时间:2016-04-06 09:03:12

标签: java recursion

我有一个问题需要了解如何计算递归参数,这在本问题Java recursion and integer double digit中有所解释。实现的代码如下所示:

public static int doubleDigits(int i){

        if (i == 0){
            return 0;
        }else{
           return doubleDigits(i / 10) * 100 + (i % 10) * 10 + i % 10;
        }


}

结果如果int i = 1234:

 11223344

我试图调试代码,但很难理解,发生了什么。

我已经检查了很多例子,我可以理解大多数情况下递归是如何工作的,但不是在这种情况下。

我希望得到一个易于理解的解释,在这种情况下递归是如何工作的。

1 个答案:

答案 0 :(得分:4)

递归始终通过解决较小的问题,然后添加到该解决方案(或组合较小的解决方案)来工作。

doubleDigits(i / 10)

将具有原始数字的所有数字的数字加倍,除了最后一个数字。

然后将它乘以100,为剩余的两位数字腾出空间,这两位数字加上(i % 10) * 10 + i % 10i % 10是输入数字的最后一位数字,它会在输出数字上加两次。

doubleDigits(1234 / 10) * 100 + (i % 10) * 10 + i % 10

112233                  * 100 +       4  * 10 +      4         = 11223344