实现计算整数位数的递归方法遇问题,请求技术帮助
问题分析与修复方案
嘿,我一眼就瞅出问题所在了!你的递归调用完全没把后续层级的结果累加进来,这就是为啥只能统计第一位数字的原因~
先拆解下你原代码的核心问题:
- 你调用
numberLength(n / 10)的时候,只是执行了这个递归方法,但没有把它返回的位数加到digits上,相当于白跑了一趟递归,最后只返回了初始加的那1位。 - 条件分支的顺序也有坑:当处理负数时,你把n转成正数后,没有继续执行后续逻辑,直接跳到了
else if(n == 0)的判断,这会导致转成正数后的数字无法进入n>0的分支处理,逻辑链断了。
修复后的递归代码
这里给你调整了逻辑,更简洁也更正确:
public static int numberLength(int n) { // 负数直接转成正数递归,不用额外处理 if (n < 0) { return numberLength(-n); } // 基线条件:小于10的数(包括0)都只有1位 if (n < 10) { return 1; } // 递归累加:当前1位 + 剩下数字的位数 return 1 + numberLength(n / 10); }
关键修复点说明
- 负数处理:直接递归调用正数版本,避免分支混乱,逻辑更清晰。
- 基线条件简化:把n<10作为终止条件,不管是0还是1-9的数字,都直接返回1,不用单独判断0。
- 递归结果累加:每次递归都把当前的1位,加上
n/10对应的数字位数,这样每一层递归的结果都会向上累加,最终得到总位数。
比如测试numberLength(123):
- 第一层:返回1 + numberLength(12)
- 第二层:返回1 + numberLength(1)
- 第三层:返回1
- 最终结果:1+1+1=3,完全正确。
再测试numberLength(-4567)会返回4,numberLength(0)返回1,都符合预期。
内容的提问来源于stack exchange,提问作者Victor Calin
相关产品推荐
相关产品推荐

