Java递归方法实现正负整数位数统计及代码错误排查
解决递归计算整数位数的问题
我来帮你看看这个递归方法的问题所在,以及怎么修复它~
原代码的核心问题
你写的代码有几个关键错误,导致传入121时始终返回1:
- 每次递归调用时,
totalDigits都会被重新初始化为0,之前的计数完全没有保留下来 - 递归调用后没有将返回的结果和当前的
totalDigits相加,相当于每次递归只做了totalDigits++,但没有把下层递归的结果累积起来 - 基准条件设置不合理:你判断
inNumber < -10 || inNumber > 10,但当数字是-9到9之间的数时,totalDigits会保持0,返回的结果也是错误的
修正后的递归实现
正确的递归思路应该是:
- 先处理负数,取绝对值(因为正负号不影响数字的位数)
- 基准条件:如果数字的绝对值小于10,说明这是单个数字,直接返回1
- 递归逻辑:每把数字除以10,就相当于去掉了最后一位,所以当前位数是1加上递归处理
数字/10的结果
完整代码如下:
public static int recursion(int inNumber) { // 处理负数,取绝对值消除符号影响 int num = Math.abs(inNumber); // 基准情况:单个数字,位数为1 if (num < 10) { return 1; } // 递归:当前位(1) + 去掉最后一位后的数字的位数 return 1 + recursion(num / 10); }
测试验证
- 传入
121时:- 第一次调用:
num=121,返回1 + recursion(12) - 第二次调用:
num=12,返回1 + recursion(1) - 第三次调用:
num=1,返回1
最终结果:1+1+1=3,符合预期
- 第一次调用:
- 传入
-120时:
取绝对值后为120,递归过程类似,最终返回3,正确
内容的提问来源于stack exchange,提问作者trueboolean
相关产品推荐
相关产品推荐

