Wenn Sie Stack sehr gut verstehen, werden Sie verstehen, wie Speicher in einem Programm funktioniert, und wenn Sie verstehen, wie Speicher in einem Programm funktioniert, werden Sie verstehen, wie Funktionen in einem Programm gespeichert werden, und wenn Sie verstehen, wie Funktionen in einem Programm gespeichert werden, werden Sie verstehen, wie rekursive Funktionen funktionieren und wenn Sie verstehen, wie die rekursive Funktion funktioniert. Sie werden verstehen, wie der Compiler funktioniert. Wenn Sie verstehen, wie der Compiler funktioniert, werden Ihre Gedanken als Compiler arbeiten und Sie werden jedes Programm sehr einfach debuggen
Lassen Sie mich erklären, wie der Stack funktioniert:
Zuerst müssen Sie wissen, wie Funktionen im Stack gespeichert werden:
Werte für die dynamische Speicherzuweisung im Heapspeicher. Stapeln Sie die automatischen Zuordnungs- und Löschwerte.
Verstehen wir anhand eines Beispiels:
def hello(x):
if x==1:
return "op"
else:
u=1
e=12
s=hello(x-1)
e+=1
print(s)
print(x)
u+=1
return e
hello(4)
Verstehe nun Teile dieses Programms:
Nun wollen wir sehen, was Stapel ist und was Stapelteile sind:
Aufteilung des Stapels:
Denken Sie daran, dass eine Funktion, wenn sie "return" erhält, unabhängig davon, ob sie alle ihre lokalen Variablen geladen hat, oder alles, was sie sofort vom Stapel zurückgibt, in den Stapelrahmen zurückkehrt. Wenn eine rekursive Funktion eine Grundbedingung erhält und die Rückgabe nach der Grundbedingung erfolgt, wartet die Grundbedingung nicht darauf, lokale Variablen zu laden, die sich im Programmteil "else" befinden, sondern gibt sofort den aktuellen Frame vom Stapel und jetzt einen Frame zurück Das nächste Bild wird im Aktivierungsdatensatz angezeigt. Sehen Sie dies in der Praxis:
Freigabe des Blocks:
Wenn also eine Funktion eine return-Anweisung gefunden hat, wird der aktuelle Frame vom Stapel gelöscht.
Wenn Sie vom Stapel zurückkehren, wird der Wert in umgekehrter Reihenfolge zurückgegeben, in der er im Stapel zugewiesen wurde.
Dies ist eine sehr kurze Beschreibung. Wenn Sie mehr über Stapel und doppelte Rekursion erfahren möchten, lesen Sie zwei Beiträge in diesem Blog:
Mehr über das Stapeln Schritt für Schritt
Mehr zu Doppelrekursion Schritt für Schritt mit Stack