ggt rekursiv



  • Ich möchte den ggt zweier Zahlen mit Hilfe einer rekursiven Funktion brechnen, mein Ansatz ist soweit auch schon fertig, der Compiler macht allerdings eine Fehlermeldung. ich glaube mir fehlt irgendwo eine Anweisung, die ihm sagt, was er mit dem Inhalt des else-Zweiges machen muss, bin mir aber nicht sicher.

    hier mein Ansatz, wäre nett, wenn mir irgendwer weiterhelfen könnte.
    #include<iostream.h>

    int ggt(int zahl1,int zahl2)
    {
    if(zahl1==0)
    return zahl2;
    if (zahl2==0 || zahl1==zahl2)
    return zahl1;
    int rest=zahl1%zahl2;
    else (rest=zahl2)
    return 0;
    )

    int main()
    {
    int zahl1,int zahl2;
    cout<<"Geben Sie 2 natürliche Zahlen ein - die größere zuerst: ";
    cin>>zahl1;
    cin>>zahl2;
    cout<<ggt;

    }



  • Hi!

    1. Da ist keine Rekursion.
    2. Der else-Zweig hat keinen if-Zweig zu dem er gehören könnte.
    3. Einem Funktionsaufruf sollten auch die Parameter übergeben werden.
    4. iostream.h ist veraltet, heißt mittlerweile nur noch iostream ohne .h.
    5. Such dir ein Tutorial oder kauf dir ein Buch.
    6. Zu deinem Problem: google.de (ggt + c + rekursion)

    Code-Hacker



  • Seltsam dass er kein void main() geschrieben hat. 😃
    Aber ich hab auch noch einen

    stefan125 schrieb:

    int zahl1,int zahl2;
    

    ist kein Standard.
    Entweder du schreibst

    int zahl1;
    int zahl2;
    

    oder

    int zahl1, zahl2;
    


  • ich habe so eine ggt Funksion geschrieben:

    if(b==0) return a;
    return ggt(b,a%b);
    


  • Tirana schrieb:

    ich habe so eine ggt Funksion geschrieben:

    if(b==0) return a;
    return ggt(b,a%b);
    

    Bei sowas immer schön schauen, ob der Compiler auch eine Tail-Recursion Optimierung durchführt, sonst halt eine iterative Fassung schreiben.



  • Schnurzelpurzel schrieb:

    Tirana schrieb:

    ich habe so eine ggt Funksion geschrieben:

    if(b==0) return a;
    return ggt(b,a%b);
    

    Bei sowas immer schön schauen, ob der Compiler auch eine Tail-Recursion Optimierung durchführt, sonst halt eine iterative Fassung schreiben.

    An der Uni funksioniert ohne Problem, und der Profi war auch zufrieden. Aber Sie haben auch recht. Vielleicht funksioniert diese Code nicht mit jeden Compiler 🙄 habe keine Ahnung



  • Schnurzelpurzel schrieb:

    Bei sowas immer schön schauen, ob der Compiler auch eine Tail-Recursion Optimierung durchführt, sonst halt eine iterative Fassung schreiben.

    Ne, Compiler wegschmeißen.



  • MaSTaH schrieb:

    Ne, Compiler wegschmeißen.

    Gehört das heutzutage zur Standardausstattung eines Compilers?



  • Bei Compilern funktionaler Sprachen schon. Bei hochoptimierenden C++-Cmopilern erwarte ich das auch.


Anmelden zum Antworten