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

Java递归实现数字根时return返回值错误但打印正常该如何排查?

问题根因
  • 核心错误是递归调用处没有返回递归结果:你写的digital_root(n);只是执行了递归逻辑,但是没有把递归调用得到的最终数字根作为当前方法的返回值,当前方法最后直接返回了本次相加得到的中间值n,所以才会出现递归内部打印正确、但外层调用拿到结果错误的情况。
  • 代码存在冗余逻辑:你已经在方法开头判断了数字长度为1时直接返回,后续的else分支永远不会被触发,属于无效代码。
修复方案

只需要把递归调用行修改为返回递归结果即可,修改后的完整代码如下:

public class DRoot {
  public static int digital_root(int n) {
    // 使用递归实现数字根计算
    System.out.println(n + " before if and for loop");
    String temporary = Integer.toString(n);
    int tempInteger = n;
    System.out.println(temporary.length() + " is temporary length");
    if(temporary.length() == 1){
      System.out.println("returns at beginning");
      System.out.println("n before return is: " + n);
      return tempInteger;
    }
    n = 0;
    for(int i = 0; i < temporary.length(); i ++){
      n += Integer.parseInt(temporary.substring(i, i+1));
      System.out.println(n + " during if and for loop");
    }
    // 直接返回递归调用的结果即可
    return digital_root(n);
  }
}
验证示例

比如输入1234:

  1. 第一层计算各位和为1+2+3+4=10,调用digital_root(10)
  2. 第二层计算1+0=1,调用digital_root(1)
  3. 第三层判断长度为1,返回1,该值会逐层向上返回,最终外层拿到的结果就是1,和打印的结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:45:08