当前位置: 首页 > 知识库问答 >
问题:

如何通过 GCD 递归将其输出

龙永福
2023-03-14

这就是它应该是什么样子

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);
        }

    }

共有1个答案

房冥夜
2023-03-14

您的代码的问题是您只在y为零时打印“返回”。这只发生一次。您要做的是,对于每个“调用”,它必须与一个“返回”配对。

换句话说,您需要在方法体的开头打印“calling ”,在return语句之前打印“returning”。

    public static int gcd(int x, int y, String ind){
       System.out.println(ind + "Calling: gcd(" + x + "," + y + ")");  //<<
       int max = Math.max(x,y), min = Math.min(x,y);
       int result = (min == 0 ? max : gcd(max%min,min,ind+ind));
       System.out.println(ind + "Returning: gcd(" + x + "," + y + ")"); //<<
       return result;
    }
 类似资料:
  • 问题内容: 到目前为止,我对如何通过参数将属性从一个组件传递到另一组件的了解程度如下 //开始:我的知识范围 假设存在一些在A.jsx中调用的状态变量。我想将此传递给B.jsx,所以我执行以下操作 然后在B.jsx中,我可以做类似 当被调用时将呈现“今天的主题是天气!” //结束:我的知识范围 现在,我正在阅读带有以下代码片段的react-router教程 topic.jsx: route.jsx

  • 因此,在这里我将basePackages硬编码为“com.example”。这不是我想要的。我想通过命令行参数从终端运行应用程序时接收包名。有没有一种方法可以将命令行参数传递给应用程序,并使用我在BasePackages中接收到的参数?提前致谢

  • 问题内容: 我有一个类似于以下内容的JSON字符串: 我对此字符串进行了JSON解析,然后将所有对象转换为HashMaps,并将所有数组转换为HashMap [] s。我的问题是我需要一个递归函数来遍历Java中此JSON结构的所有节点。我怎样才能做到这一点?我在想类似的东西: 问题答案: 假设一个数组只能在内部包含Maps(而不是其他数组): 或者,如果您可以使用3个功能,则可以使其更简单

  • 问题内容: 我正在尝试使用命令行ftp客户端通过ftp文件夹,但是到目前为止,我只能使用’get’来获取单个文件。 问题答案: 您可以依靠通常可以正常处理ftp的wget(至少以我自己的经验)。例如: 您也可以使用适合镜像的。目前等同于。 如果凭据详细信息中包含一些特殊字符,则可以指定和参数以使其生效。具有特定字符的自定义登录的示例: 编辑 @asmaier指出,请注意,即使要进行递归,它的默认最

  • 我正在编写一个递归过程来返回字符串的排列 我将所需的输出打印到控制台。但是,我希望将输出添加到一个数组中,以便能够对其进行进一步的处理。怎么才能实现? 我得到:[ABCD][ABDC][ACBD][ACDB][ADBC][ADCB] 我想要:[ABCD、ABDC、ACBD、ACDB、ADBC、ADCB,]

  • 问题内容: 如何递归所有目录和子目录? 问题答案: 第一个参数表示要搜索的正则表达式,而第二个参数表示应搜索的目录。在这种情况下,表示当前目录。 注意:这适用于GNU grep,在某些平台(如Solaris)上,必须专门使用GNU grep而不是传统实现。对于Solaris,这是命令。