rekursive Implementation :: Variablen was passiert damit ?
-
was Passiert mit den Variablen in einer prozedur die sich immer wieder selbst aufruft, bevor sie ganz fertig ist ?
Und was ist mit sind mit Variablen, in Prozeduren, die sich gegenseitig immer wieder aufrufen. DIE VARIABLEN SIND NATÜRLICH NICHT GLOBAL.1. Arbeitet er mit ihnen und ihrem aktuellen Wert weiter ?
2. Löscht er ihren inhalt ?
3. Oder legt automatisch wie ein array an ?
-
Wenn du eine Funktion aufrufst (egal, ob sie 'sich selbst' aufgerufen hat), werden natürlich alle lokalen Variablen neu angelegt. Lokale Variablen eines vorherigen Aufrufs sind für diese Instanz nicht existent. Eine Ausnahme sind da natürlich static-Variablen, deren Wert bleibt erhalten (auch unabhängig von Rekursion). Wenn du also Werte von einem Aufruf in den nächsten 'retten' willst, kannst du entweder static nutzen (wenn dadurch auch genau das erreicht wird, was du willst, und nicht mehr!) oder die Parameterübergabe.
-
Hallo
Alle lokalen Variablen werden pro rekursiven Aufruf neu auf dem Stack angelegt, wie schon von matze angemerkt. Das führt auch dazu das bei einer unkontrollierten Rekursion die Gefahr besteht das der Stack voll belegt wird und das Betriebssystem mit dem Fehler "Stack Overflow" das Programm hart beendet. Deshalb sollte man Rekursionen, die eine große Aufruftiefe erreichen können, lieber auf Iterationen umbauen wenn möglich. Oder eben möglichst keine lokalen Variablen verwenden.
bis bald
akari
-
Achso ok.
Das ist gut, dass da so ist, weil ich die Variablen seperiert brauch (NEOLOGISMUS !!! :p ) aber die alten sind noch da ? Ja sonst kein Stack Overflow würd ich mal so sagen ^^
-
Tim06TR schrieb:
Achso ok.
Das ist gut, dass da so ist, weil ich die Variablen seperiert brauch (NEOLOGISMUS !!! :p ) aber die alten sind noch da ? Ja sonst kein Stack Overflow würd ich mal so sagen ^^Solange der Scope gültig ist, existiert eine zugehörige Variable auch. Wenn du in einer Funktion eine lokale Variable anlegst, existiert sie bis zum Ende der Funktion. Ganz unabhängig davon, ob du währenddessen andere Funktionen (auch die Funktion selbst nochmal) aufrufst. Also ja!
-
Tim06TR schrieb:
Achso ok.
Das ist gut, dass da so ist, weil ich die Variablen seperiert brauch (NEOLOGISMUS !!! :p ) aber die alten sind noch da ? Ja sonst kein Stack Overflow würd ich mal so sagen ^^Wenn dann separiert (KLUGSCHEISS !!! :p)