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

如何让递归实现的GCD函数输出符合预期格式?

问题

我希望递归实现的GCD函数输出符合如下预期格式:

预期输出示例

Calling: gcd(20,12) 
  Calling: gcd(12,8) 
    Calling: gcd(8,4) 
      Calling: gcd(4,0) 
        Returning: 4 from gcd(4,0) 
      Returning: 4 from gcd(8,4) 
    Returning: 4 from gcd(12,8) 
  Returning: 4 from gcd(20,12) 
Returning: 4 from gcd(12,20)

但当前我的输出仅为:

当前输出

Calling: gcd(10,16)
  Calling: gcd(16,10)
    Calling: gcd(10,6)
      Calling: gcd(6,4)
        Calling: gcd(4,2)
          Returning: 2 from gcd(2,0)

我的实现代码如下:

我的代码

public static int gcd(int x, int y, String indent) {
        if (y == 0) {
            System.out.println(indent + "Returning: " + x + " from gcd(" + x + "," + y + ")");
            return x;
        } else {
            System.out.println(indent + "Calling: gcd(" + x + "," + y + ")");
            indent = indent + "  ";
            return gcd(y, x % y, indent);
        }

    }

请问如何修改代码,让输出符合预期的完整调用与返回层级?

解决方案

问题核心是你只在递归终止条件(y==0)时打印了返回信息,递归调用返回后,没有打印当前层级的返回日志,导致输出缺失了后续的返回语句。

修改思路:在递归调用完成后,添加当前层级的返回打印语句,且要使用调用前的原始缩进,保证返回日志的层级和调用时一致。

修改后的代码:

public static int gcd(int x, int y, String indent) {
    if (y == 0) {
        System.out.println(indent + "Returning: " + x + " from gcd(" + x + "," + y + ")");
        return x;
    } else {
        System.out.println(indent + "Calling: gcd(" + x + "," + y + ")");
        // 保存当前缩进,避免修改后影响返回日志的层级
        String nextIndent = indent + "  ";
        // 先执行递归调用并获取结果
        int result = gcd(y, x % y, nextIndent);
        // 递归返回后,打印当前层级的返回信息
        System.out.println(indent + "Returning: " + result + " from gcd(" + x + "," + y + ")");
        return result;
    }
}

改动说明

  1. 用nextIndent变量存储下一层级的缩进,保留当前函数的原始缩进,用于后续打印返回日志。
  2. 先完成递归调用并保存结果,再打印当前函数的返回语句,确保每个调用层级都有对应的返回日志。
  3. 返回日志使用当前函数的原始缩进,保证输出的层级结构和调用时完全对应。

修改后,每次递归调用返回时都会打印对应层级的返回语句,就能得到和预期一致的完整调用与返回层级输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:17:02