2017-06-26 3 views
0

Ich mache eine Aufgabe, wo ich eine iterative und rekursive Funktion erstellen muss, die zwei Arrays (x_vals [i] und y_vals [i]) liest und die GCD jeweils ausgibt. Die Ergebnisse der rekursiven und der iterativen Funktionen sollten identisch sein, ansonsten stimmt etwas mit einer oder beiden Funktionen nicht. Unten ist was ich habe. Was ich nicht verstehen kann, ist, was mit dem Programm nicht stimmt, zum Beispiel warum meine Ergebnisse nicht übereinstimmen.GCD, iterative und rekursive Ausgabe

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

/* function prototypes */ 
int iterGCD(int x, int y); 
int recGCD(int x, int y); 

int main(int argc, char *argv[]) 
{ 
    int num_vals = 6; 
    int x_vals[] = {3, 9, 12, 36, 1, 105}; 
    int y_vals[] = {3, 21, 18, 27, 12, 91}; 
    int i = 0; 

    printf("Assignment 2 Problem 2 by <Jonathan Taylor>.\n\n"); 

    while (i<num_vals) 
    { 
     printf("Iterative GCD: x = %d, y = %d, result = %d\n", x_vals[i], y_vals[i], iterGCD(x_vals[i],y_vals[i])); 
     printf("Recursive GCD: x = %d, y = %d, result = %d\n\n", x_vals[i], y_vals[i], recGCD(x_vals[i],y_vals[i])); 

     i++; 
    } 

    return 0; 
} 

int iterGCD(int x, int y) 
{ 
    int GCD = 1; 
    int number = 1; 

    /*For loop method, you could ignore if you like 
    for (number = 1; number <= x && number <= y; ++number){ 
     if(x % number == 0 && y % number == 0){ 
     GCD = number; 
    } 
    */ 

    while ((number <= x) && (number <= y)) { 
     ++number; 

     if(x % number == 0 && y % number == 0) { 
     GCD = number; 
     } 

     return GCD; 
    } 
} 

int recGCD(int x, int y) 
{ 
    if(y != 0){ 
     int remainder = x % y; 
     return recGCD(y, remainder); 
    } 
    return x; 
} 
+0

Warum denken Sie etwas nicht in Ordnung ist? –

+0

Was sind Ihre Ergebnisse? – MrJLP

+0

Zeige Ergebnisse für jedes und was erwartet wird – MrJLP

Antwort

1

Ihre Rückkehr in iterGCD ist am falschen Ort:

while ((number <= x) && (number <= y)) { 
    ++number; 

    if(x % number == 0 && y % number == 0) { 
    GCD = number; 
    } 

    return GCD;  // <----------- wrong 
} 

Sie gehen durch eine einzige Iteration der Schleife und return am Ende der Schleife. Bewegen Sie den return-nach die Schleife:

while ((number <= x) && (number <= y)) { 
    ++number; 

    if(x % number == 0 && y % number == 0) { 
    GCD = number; 
    } 

} 
return GCD; // <----------- move here 
+0

So einfach, vielen Dank! –

+0

@EliTaylor Froh, dass ich helfen könnte. Fühlen Sie sich frei, [diese Antwort zu akzeptieren] (https://stackoverflow.com/help/accepted-answer), wenn Sie es nützlich fanden. – dbush