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 continueIch 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.