You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现计算整数位数的递归方法遇问题,请求技术帮助

问题分析与修复方案

嘿,我一眼就瞅出问题所在了!你的递归调用完全没把后续层级的结果累加进来,这就是为啥只能统计第一位数字的原因~

先拆解下你原代码的核心问题:

  • 你调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:45:37