使用递归并实现Euclid算法从用户中查找三个数字的GCD

时间:2014-03-22 20:58:59

标签: java algorithm recursion greatest-common-divisor

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

我的代码现在实现了两个输入数字。我理解计算a和b的GCD并将其称为结果d的方法。然后使用第三个输入(c)和d找到GCD并再次重复Euclid算法;我不知道如何在代码中实现它。

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.

非常感谢任何帮助或建议!

2 个答案:

答案 0 :(得分:2)

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 = ay = b来查找ab的GCD。将结果存储到新变量d中。之后,您使用x = d再次调用它,而a又是by = c以及{{1}}的GCD。因此,您可以获得所有三个数字的GCD。

答案 1 :(得分:1)

可以迭代gcd方法以获得更大数字集的gcd。 例如:

gCd(a, b, c) = gCd( gCd(a, b), c)

gCd(a, b, c, d) = gCd( gCd(a, b, c), d)等等 gCd(a, b, c, d) = gCd( gCd( gCd(a, b), c), d)

简单,具体的解决方案:

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

但是,如果您注意到,则会发生递归。我已经创建了一个方法,它将整数的数组作为输入。它适用于三个或任何大小的数组。以下是方法:

/* returns gcd of two numbers: a and b */
public static int gCd(int a, int b) {
    if (b == 0) {
        return a;
    }
    return gCd(b, a%b);
}

/* returns gcf of an array of numbers */
public static int gCd(int[] numbers)
{
    int result = numbers[0]; // first number

    for(int i = 1; i < numbers.length; i++) {
        result = gCd(result, numbers[i]); // gcf of itself and next #
    }
    return result;
}

所以,将它与你的代码联系起来:

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("Enter third number: ");
int c = userInput.nextInt();

// you can do this
System.out.println("GCD is: " + gCd( gCd(a, b), c) );

// or you can do this
int[] numbers = {a, b, c};
int d = gCd(numbers);

System.out.println("GCD is: " + d);

示例输入/输出:

Enter first number: 
12
Enter second number: 
18
Enter third number: 
30
GCD is: 6
GCD is: 6