2017-04-12 5 views
-2

J'ai de la difficulté à comprendre comment programmer ci-dessous les travaux et j'apprécierais que quelqu'un m'explique comment ça fonctionne exactement.Quelqu'un peut-il m'expliquer comment fonctionne ce programme?

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

Cette partie ci-dessous est spécifiquement ce que j'ai de la difficulté à comprendre. S'il vous plaît n'hésitez pas à expliquer en détail, je veux le comprendre pleinement. Merci pour votre temps.

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

Réponse standard: Parcourez le programme dans votre débogueur, une ligne à la fois, en examinant les variables au fur et à mesure, jusqu'à ce que vous compreniez la logique. –

+0

Le vote à la baisse semble dur pour moi? La récursivité est souvent difficile jusqu'à ce que vous l'obteniez. et de passer par le débogueur ne serait pas nécessairement utile à moins que vous sachiez quelle récursion était – Scheme

Répondre

1

Ainsi, la pièce que vous en débattant notamment:

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

Ceci est une fonction récursive, ce qui est j'imagine ce que vous cause des difficultés. Pour mieux comprendre les fonctions récursives en général, lisez peut-être ceci: http://www.python-course.eu/recursive_functions.php Ne vous inquiétez pas qu'il utilise python comme exemple. Dans ce cas en particulier, la fonction renverra le numéro 1 lorsque le numéro 2 est 0. Si le numéro deux n'est pas zéro, il appellera la fonction à nouveau avec le numéro 2 étant le reste de number1/number2, également connu sous le nom de module% https://en.wikipedia.org/wiki/Modulo_operation .

Vous pouvez écrire la fonction dans une aswell boucle 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; 
    } 
} 

espoir qui aide un peu? Ou du moins ne fait rien de plus confus.

+1

Merci beaucoup, surtout pour les liens cela m'a vraiment aidé. Je ne sais pas pourquoi les gens ont voté au lieu d'essayer d'aider, j'étais sur le point de supprimer cette question après les votes négatifs et le dernier commentaire des gars qui ne m'aidait pas du tout et me semblait arrogant. – John

+0

@John ne s'inquiète pas, je suis content que cela a aidé. La récursivité est l'un des premiers obstacles que traversent de nombreux étudiants en informatique. Ne vous inquiétez pas, il sera facile de comprendre assez rapidement. – Scheme