2017-04-12 115 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

相關問題