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

Java递归方法实现正负整数位数统计及代码错误排查

解决递归计算整数位数的问题

我来帮你看看这个递归方法的问题所在,以及怎么修复它~

原代码的核心问题

你写的代码有几个关键错误,导致传入121时始终返回1:

  • 每次递归调用时,totalDigits都会被重新初始化为0,之前的计数完全没有保留下来
  • 递归调用后没有将返回的结果和当前的totalDigits相加,相当于每次递归只做了totalDigits++,但没有把下层递归的结果累积起来
  • 基准条件设置不合理:你判断inNumber < -10 || inNumber > 10,但当数字是-9到9之间的数时,totalDigits会保持0,返回的结果也是错误的

修正后的递归实现

正确的递归思路应该是:

  1. 先处理负数,取绝对值(因为正负号不影响数字的位数)
  2. 基准条件:如果数字的绝对值小于10,说明这是单个数字,直接返回1
  3. 递归逻辑:每把数字除以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时:
    1. 第一次调用:num=121,返回1 + recursion(12)
    2. 第二次调用:num=12,返回1 + recursion(1)
    3. 第三次调用:num=1,返回1
      最终结果:1+1+1=3,符合预期
  • 传入-120时:
    取绝对值后为120,递归过程类似,最终返回3,正确

内容的提问来源于stack exchange,提问作者trueboolean

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:15:54