我想要求用户输入三个数字然后让程序使用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.
非常感谢任何帮助或建议!
答案 0 :(得分:2)
d = gCd (a, b);
System.out.println("GCD is: " + gCd(d, c));
请注意,您可以使用任意两个参数调用gCd
函数,而不仅仅是a
和b
。为了更好地理解和减少混淆,您可能希望重命名其参数,如下所示:
public static int gCd(int x, int y) {
if(y == 0) {
return x;
}
return gCd(y, x%y);
}
首先,您可以使用x = a
和y = b
来查找a
和b
的GCD。将结果存储到新变量d
中。之后,您使用x = d
再次调用它,而a
又是b
和y = 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