Wenn Sie Stack sehr gut verstehen, werden Sie verstehen, wie Speicher im Programm funktioniert, und wenn Sie verstehen, wie Speicher im Programm funktioniert, werden Sie verstehen, wie Funktionsspeicher im Programm gespeichert sind, und wenn Sie verstehen, wie Funktionsspeicher im Programm funktionieren, 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, funktioniert Ihr Verstand als Compiler und Sie können jedes Programm sehr einfach debuggen
Lassen Sie mich erklären, wie Stack funktioniert:
Zuerst müssen Sie wissen, wie Funktionen im Stapel dargestellt werden:
Heap speichert dynamisch zugewiesene Werte.
Der Stapel speichert automatische Zuordnungs- und Löschwerte.
Lassen Sie uns mit Beispiel verstehen:
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)
Verstehen Sie nun Teile dieses Programms:
Nun wollen wir sehen, was Stapel ist und was Stapelteile sind:
Zuordnung des Stapels:
Denken Sie an eines: Wenn die Rückgabebedingung einer Funktion erfüllt ist, unabhängig davon, ob sie die lokalen Variablen geladen hat oder nicht, kehrt sie sofort mit ihrem Stapelrahmen vom Stapel zurück. Dies bedeutet, dass die Basisbedingung nicht darauf wartet, lokale Variablen zu laden, die sich im Teil "else" des Programms befinden, wenn eine rekursive Funktion die Basisbedingung erfüllt und wir eine Rückgabe nach der Basisbedingung setzen. Der aktuelle Frame wird sofort vom Stapel zurückgegeben, woraufhin sich der nächste Frame im Aktivierungsdatensatz befindet.
Sehen Sie dies in der Praxis:
Freigabe des Blocks:
Immer wenn eine Funktion auf eine return-Anweisung stößt, wird der aktuelle Frame vom Stapel gelöscht.
Bei der Rückkehr vom Stapel werden die Werte in umgekehrter Reihenfolge zurückgegeben, in der sie ursprünglich im Stapel zugewiesen wurden.