2017-04-12 53 views
-2

我无法理解如何在下面编写程序,我希望有人向我解释它的运行方式。有人可以向我解释这个程序的工作原理吗?

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

标准响应:逐个调试器中的程序,一次一行,随时检查变量,直到理解逻辑。 –

+0

投票对我来说似乎很难受?递归往往很难,直到你“得到”它。如果不知道递归是什么,那么使用调试器并不一定有帮助 – Scheme

回答

1

所以部分你是在特定的挣扎:

// 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时,函数将返回数字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; 
    } 
} 

希望帮助一下? 或者至少不会让任何事情更令人困惑。

+1

非常感谢您,特别是对于这些帮助我的链接。我不知道为什么人们拒绝投票而不是尝试提供帮助,在倒票和最后一个人的评论之后,我接近删除了这个问题,这对我根本没有任何帮助,而且对我来说似乎很傲慢。 – John

+0

@John不用担心,我很高兴它有帮助。递归是许多计算机科学专业学生经历的第一个障碍之一。不要担心,它会很容易理解。 – Scheme

相关问题