Ich bin unsicher, wie Variablen während der Rekursion im Speicher erzeugt und gespeichert werden. Unten ist ein Beispiel aus C Primer Plus:
%Vor%Was die Ausgabe ergibt:
Level 3: 0x3ce1f8bc
Stufe 4: 0x3ce1f89c
EBENE 4: 0x3ce1f89c
EBENE 3: 0x3ce1f8bc
Es sieht so aus, als ob die "n" Variable, die für den ursprünglichen Funktionsaufruf lokal ist, eine Adresse ist, die sequenziell später ist als die des ersten (und einzigen) rekursiven Aufrufs. Warum das?
Wenn ich eine Funktion aufruft, werden nicht ihre formalen Parameter deklariert und in Bezug auf das eigentliche Argument definiert? Bedeutet das nicht, dass die Ganzzahl n local für den ersten Aufruf vor dem zweiten (rekursiven) Aufruf erstellt wird? Wie könnte das n des zweiten Anrufs eine Adresse früher als der erste Anruf haben?
Dies liegt daran, dass die lokalen automatischen Variablen, die während der rekursiven Funktionsaufrufe erstellt wurden, auf dem Stapel gespeichert werden und der Stapel auf den meisten Plattformen, einschließlich x86, von einer höheren zu einer niedrigeren Adresse "nach unten" wächst. Daher wird eine Funktion, die später im Prozess aufgerufen wird, Variablen mit einer "niedrigeren" Adresse haben als Variablen, die von einem früheren Funktionsaufruf gespeichert wurden.