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

標準的な対応:ロジックを理解するまで、デバッガのプログラムを1行ずつ実行し、変数を調べてください。 –

+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がゼロでない場合、number2が数値1 /数値2の剰余である関数を再度呼び出します。係数:https://en.wikipedia.org/wiki/Modulo_operation

//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; 
    } 
} 

希望を少し助け:

あなたは、whileループのaswellで関数を書くことができますか? 少なくとも、もっと混乱させるものはありません。

+1

ありがとう、特にこれは私を助けました。私はなぜ人々が助けようとするのではなく投票したのかわからない、私は下の投票の後にこの質問を削除することに近づきました。そして私を助けなかった最後の人のコメントは私には傲慢でした。 – John

+0

@ジョンの心配は、私はそれが助けてうれしいです。再帰は、コンピュータサイエンスの多くの学生が通過する最初のハードルの1つです。しかし、心配する必要はありません、それは十分に迅速に理解しやすくなります。 – Scheme

関連する問題