Rekursion



  • Hallo,
    es geht um einen Binären Baum und ich habe folgende Funktion zum Freigeben des allozierten Speichers gegeben:

    void release(node *n) 
    {
         if(n) {
               if(n->no)
                   release(n->no);
    
               if(n->yes)
                   release(n->yes);
    
               if(n->question) 
                   free(n->question);
    
               free(n);
         }
    }
    

    Die Funktion arbeitet ja rekursiv und wenn ich das erste Mal die Funktion mit dem Startnode aufrufe und diese einen Zeiger auf den no-Node enthält, wird nochmal die release()-Funktion aufgerufen. Wird dann die Ausführung des ersten Aufrufs der release()-Funktion "eingefroren" und erst wieder fortgesetzt, wenn der zweite (bzw. n-Aufruf) vorbei ist (also wird nochmal der gleiche Baum mit Aufrufen der Funktion aufgebaut, der sich dann vom untersten Node bis zum ersten Node aufruft?) ?

    Ich hoffe, ich habe das verständlich ausgedrückt 😃

    Mfg Jaob


  • Mod

    Unabhängig von diesem Beispiel: Ein Funktionsaufruf kehrt erst zurück, wenn er komplett fertig ist. Erst danach geht es weiter. Bei einem rekursiven Aufruf kann das eine Weile dauern.

    P.S.: Das heißt, wenn ich deine Frage richtig verstanden habe (sie ist ein bisschen wirr): Ja.



  • Ok, danke. Dann habe ich das richtige gedacht (wurde in dem Buch leider nicht erklärt ...).


Anmelden zum Antworten