if anweisung ignoriert??



  • Ich habe gerade versucht ein mini Prog zu schreiben das mir den GGT von zwei Zahlen berechnet

    #include <iostream.h>
    
    int ggt(int,int);
    
    int main()
    {
    
    	int ergebnis,a=66, b=72;
    	ergebnis=ggt(a,b);
    	cout<<ergebnis;
    	return 0;
    }
    
    int ggt(int a, int b)
    {
    	if (b>a)
    	{
    		cout<<a<<" mit "<<b<<" tauschen"<<endl;
    		ggt(b,a);
    	}
    
    	if (b!=0)
    	{
    		cout<<a<<" modulo "<<b<<" = "<<a%b<<" und "<<b<<" zurueckgeben!"<<endl;
    		ggt(b,a%b);
    	}
    
    	else
    	{
    		return a;
    	}
    }
    

    Ich gebe ja jetzt an dass er a und b tauschen soll wenn b größer ist das macht er auch aber wieso wird auch alles einmal mit größerem b durchgerechnet???

    Meine Ausgabe mit 66 und 72:

    66 mit 72 tauschen
    72 modulo 66 = 6 und 66 zurueckgeben!
    66 modulo 6 = 0 und 6 zurueckgeben!
    bis hier ist ja alles klar aber:
    66 modulo 72 = 66 und 72 zurueckgeben!
    72 modulo 66 = 6 und 66 zurueckgeben!
    66 modulo 6 = 0 und 6 zurueckgeben!
    6
    Press any key to continue

    Ich hoffe jemand versteht jetzt überhaupt was ich fragen will aber ich konnte mich nicht besser ausdrücken ich hoffe jemand kann mir helfen DANKE!



  • Ich würde spontan sagen, dass die rekursiven Aufrufe return-Anweisungen sein sollten: return ggt(b, a); und return ggt(b, a%b);.



  • Zunächst werden a und b vertauscht, wie Du es in der ertsen if- Schleife Vorhast, dann folgt der rekursive Aufruf Deiner Funktion, sobald der "durch" ist überprüft Dein Programm, ob b ungleich null sei und zwar mit der a/b positionskombination, mit der die ggt- Funktion das erste Mal aufgerufen wurde und arbeitet brav die Anweisungen ab.
    Du musst nach dem rekrusiven Aufruf etwas zurückgeben, um zu verhindern, dass die nächste if- Anweisung durchlaufen wird.


Anmelden zum Antworten