Speicherklassen

Laik

Grünschnabel
Hi an alle,

habe folgenden Code auf geeksforgeeks gefunden:

C:
#include <stdio.h>
int main()
{
    static int i=5;
    if(--i){
        main();
        printf("%d ",i);
    }
    return 0;
}

Die Ausgabe ist: 0 0 0 0

Kann mir das wer erklären ?
Ich verstehe es so, dass die i in der if-Anweisung dekrementiert wird und dann geprüft wird ob i != 0 ist und main beginnt von vorn.
Irgendwann ist i = 0, aber somit ist ja die if-Anweisung nicht mehr erfüllt.
Wieso springt er trotzdem in die Zeile printf und gibt 4 mal die 0 aus ?

LG
Laik
 
Versteh ich das richtig, dass erst sobald i = 0 ist, die vorherigen 4 Durchläufe in die print Zeile springen ?
 
Genau.
Gehört zu den Grundlagen der Rekursion.
In deinem Fall, der Aufruf von "return 0" lässt die Ausführung an den Punkt zurückspringen, von wo aufgerufen wurde.
In deinem Code erfolgt der Aufruf in Zeile 6, wenn Fertig ("return 0" wird ausgeführt) spring zurück, und landet in Zeile 7
 
Zurück