java - 使用递归并实现欧几里得算法来查找用户的三个数字的 GCD

标签 java algorithm recursion greatest-common-divisor

我想要求用户输入三个数字,然后让程序在使用递归的同时使用欧几里得算法计算 GCD。

我的代码现在实现两个输入数字。我理解计算 a 和 b 的 GCD 并将其称为结果 d 的方法。然后使用第三个输入 (c) 和 d 求 GCD,本质上再次重复欧几里得算法;我不确定如何在代码中实现这一点。

import java.util.Scanner;

public class RecursionDemo {

public static void main (String[] args) {

Scanner userInput = new Scanner(System.in);

     System.out.println("Enter first number: ");
     int a = userInput.nextInt();

     System.out.println("Enter second number: ");
     int b = userInput.nextInt();


     System.out.println("GCD is: " + gCd(a, b));
   }

     public static int gCd(int a, int b) {

     if(b == 0){
         return a;
        }
     return gCd(b, a%b);         
   }
}   

真正让我失望的部分是使用递归来解决我的问题。

到目前为止我知道我需要实现:

System.out.println("Enter third number: ");
     int c = userInput.nextInt();

d = //Not sure here

//And then modify my recursion method to find GCD.

任何帮助或建议将不胜感激!

最佳答案

d = gCd (a, b);
System.out.println("GCD is: " + gCd(d, c));

请注意,您可以调用 gCd具有任意两个参数的函数,而不仅仅是 ab 。为了更好地理解和减少混淆,您可能需要重命名其参数,如下所示:

 public static int gCd(int x, int y) {
     if(y == 0) {
         return x;
     }
     return gCd(y, x%y);
 }

所以,首先你用 x = a 来调用它和y = ba 的 GCD和b 。将结果存储到新变量d中。之后,您再次使用 x = d 调用它。其 GCD 又为 ab ,和y = c 。这样你就得到了所有三个数字的 GCD。

关于java - 使用递归并实现欧几里得算法来查找用户的三个数字的 GCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22583517/

相关文章:

Java Apache POI 和 JDBC : Smart way to fetch huge amount of data into Excel

java - 作为 jar 运行时找不到类路径资源

python - 从python中的图形中提取点

algorithm - 如何在加权无向图中找到包含两个给定节点的最小加权循环?

performance - Haskell 函数 nub 效率低下

java - 递归流

java - 区分从客户端发送的消息和其他发送的消息

java - 读取 Avro 文件给出 AvroTypeException : missing required field error (even though the new field is declared null in schema)

java - 我的递归列表的前置功能创建了一个无限列表

c - 我需要使用 C 的合并原则递归地从列表中删除重复项