Größter gemeinsamer Teiler mittels rekursiver Funktion



  • Hi

    Aufgabe ist es, ein Programm zu schreiben welches den größten gemeinsamen Teiler zweier natürlichen Zahlen ausgibt, jedoch ohne Schleifen zu verwenden. Mein Ansatz war die Verwendung einer direkt rekursiven Funktion. Wenn ich das Programm starte und die zwei Zahlen eingelesen habe startet es jedoch eine Endlosschleife und es funkioniert nicht mehr.

    #include <iostream>
    using namespace std;
    
    int eingabe1, eingabe2;
    
    int ggt (int a, int b){
    	if(a!=b){
    		if(a>b){
    			a=a-1;
    			if(eingabe1%a==0 && eingabe2%b==0 && a==b){
    				return a;}
    			else{
    				ggt(a, b);}}
    		else{
    			b=b-1;
    			if(eingabe1%a==0 && eingabe2%b==0 && a==b){
    				return a;}
    			else{
    				ggt(a, b);}
    			}
    		}
    		a=a-1;
    		b=b-1;
    		if(eingabe1%a==0 && eingabe2%b==0){
    				return a;}
    			else{
    				ggt(a, b);}
    	}
    
    int main (){
    	cin >> eingabe1 >> eingabe2;
    	cout << ggt(eingabe1, eingabe2);
    	return 0;
    }
    

    Ich hoffe ihr könnt mir helfen und schonmal danke im Voraus! 👍



  • Was ist mit a==b?
    Wenn du den Warninglevel deines Compilers hochdrehst, sollte er die sagen, dass die Funktion ggt nicht immer einen Wert liefert.
    Deine {}-Paare sind sehr unleserlich gesetzt.
    Benutze einen Debugger.



  • Und deine ggt-Funktion sollte nur die übergebenen Parameter a und b nutzen, nicht noch die globalen Eingabewerte!
    Der GGT zweier Zahlen ist schließlich immer gleich, egal welche Werte der User eingegeben hat 😉
    Tipp: Euklidischer Algorithmus


Anmelden zum Antworten