有人可以向我解释这个程序是如何工作的吗?

Can someone explain to me how this program works?

我无法理解下面的程序是如何工作的,如果有人向我解释它究竟是如何运行的,我将不胜感激。

public static void main(String[] args) {
    //Enter two number whose GCD needs to be calculated. 
    Scanner scanner = new Scanner(System.in);

    // Title of what program will do
    System.out.println("GCD Finder");
    System.out.println("");

    // Here user is instructed to enter the numbers
    System.out.println("Please enter first number: "); 
    int number1 = scanner.nextInt(); 
    System.out.println("Please enter second number: "); 
    int number2 = scanner.nextInt(); 

    // The numbers are then calculated using findGCD.
    System.out.println("GCD of two numbers " + number1 +" and " + number2 +" is : " + findGCD(number1,number2)); 
    } 


private static int findGCD(int number1, int number2) { 
    //base case 
    if(number2 == 0){ 
        return number1; 
        } 
    // Returns the two numbers 
    return findGCD(number2, number1%number2); 
    } 

下面这部分是我特别难以理解的部分。请不要犹豫详细解释,我想完全理解它。谢谢你的时间。

private static int findGCD(int number1, int number2) { 
    //base case 
    if(number2 == 0){ 
        return number1; 
        } 
    // Returns the two numbers 
    return findGCD(number2, number1%number2); 
    } 

所以你特别纠结的部分:

// A function which returns the greatest common divisor.
private static int findGCD(int number1, int number2) { 
    //base case 
    if(number2 == 0){ 
        return number1; 
        } 
    // Returns the two numbers 
    return findGCD(number2, number1%number2); 
} 

这是一个递归函数,我想这是给您带来困难的原因。为了更好地理解一般的递归函数,请阅读以下内容:http://www.python-course.eu/recursive_functions.php 不要担心它使用 python 作为示例。

在这种情况下,特别是当数字 2 为 0 时,函数将 return 数字 1。如果数字 2 不为零,则它将再次调用该函数,其中数字 2 是数字 1 / 数字 2 的余数,否则已知作为模数 % https://en.wikipedia.org/wiki/Modulo_operation.

您也可以在 while 循环中编写函数:

//PSEUDOCODE WATCH YOURSELF

private static int findGCD(int n1, int n2) {
    int result = 0;
    while(true) {
        if(n2 == 0) {
            return result;
        }
        result = n1;
        n1 = n2;
        n2 = result-n2;
    }
}

希望对您有所帮助? 或者至少不会让任何事情变得更加混乱。