我有一个问题需要了解如何计算递归参数,这在本问题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
我试图调试代码,但很难理解,发生了什么。
我已经检查了很多例子,我可以理解大多数情况下递归是如何工作的,但不是在这种情况下。
我希望得到一个易于理解的解释,在这种情况下递归是如何工作的。
答案 0 :(得分:4)
递归始终通过解决较小的问题,然后添加到该解决方案(或组合较小的解决方案)来工作。
doubleDigits(i / 10)
将具有原始数字的所有数字的数字加倍,除了最后一个数字。
然后将它乘以100,为剩余的两位数字腾出空间,这两位数字加上(i % 10) * 10 + i % 10
。 i % 10
是输入数字的最后一位数字,它会在输出数字上加两次。
doubleDigits(1234 / 10) * 100 + (i % 10) * 10 + i % 10
112233 * 100 + 4 * 10 + 4 = 11223344