rekursion



  • habe mal eine frage:

    #include <iostream>
      using namespace std;
    
      void Rekursion(int anzahl)
      {
        if(anzahl>1)
        {
          Rekursion(anzahl-1);
        }
        cout<<"Rekursion: "<<anzahl<<"\n";
      }
    
      int main()
      {
        int i;
        for(i=0;i<10;++i)
        {
          cout<<"Iteration: "<<i+1<<"\n";
        }
    
        Rekursion(10);
    	return 0;
      }
    

    was genau passiert eigentlich in der funktion rekursion?
    das hier

    Rekursion(anzahl-1);
    

    peil ich irgendwie nicht..



  • Die selbe Funktion wird ein weiteres Mal mit dem Parameter, der übergeben wurde, - 1 übergeben.
    Die aufgerufene Funktion tut das Selbe, dabei ändert sich der Paramter jeweils um - 1.
    Irgendwann aber, kommt es zum Ende, denn dann ist der Übergabeparameter nicht mehr > 1 und somit wird die neue Funktion nicht aufgerufen und die Funktionen können alle nacheinander beendet werden.

    MfG MAV



  • also zuerst mal ein Hinweis auf die ANSI-C FAQ, da ist die Rekursion erklärt.
    In deinem Programm ruft sich die Funktion Rekursion selbst auf. Was passiert:

    Zuerst startest du die Funktion mit 10.
    da 10 grösser ist als 1 wird die Funktion nochmals gestartet, diesmal aber mit 9. Das geht dann so weiter mit 8, 7, 6, ..., 1.
    Danach ist man sozusagen in der Untersten Ebene, in der 10. Hier wird nun die Zahl ausgegeben, die 1. Nun wird die Funktion verlassen, man ist sozusagen in der 9. Funktion. Nun wird hier die Zahl ausgegeben und auch diese Funktion verlassen. Jetzt werden der Reihe nach alle Funktionen (Ebenen) verlassen, nachdem ihre Zahl ausgegeben wurde, bis man wieder in der main() angelangt ist.

    Vielleicht wird es klarer, wenn du eine Zeile einfügst, die dir zeigt, was die Variable Anzahl für einen Wert hat, bevor du die Funktion erneut aufrufst.

    void Rekursion(int anzahl)
      {
        cout << "Vor dem aufruf der nächsten Funktion: " << anzahl << endl;
        if(anzahl>1)
        {
          Rekursion(anzahl-1);
        }
        cout<<"Rekursion: "<<anzahl<<"\n";
      }
    

    Hoffentlich habe ich dir wenigstens ein bisschen geholfen.



  • ja, vielen dank für die antworten :)..


Anmelden zum Antworten