Frage zu c++ Rekursion und lokale Variablen
nehme an, dass ich diese Rekursion:
void doSomething(double j)
{
double x;
double y;
x = j -1;
y = j -2 ;
doSomething(x+y);
x = j + 31;
y = j + 12 ;
}
Ich weiß, dass diese Rekursion führt unendlich, aber einfach ignorieren, dass
Meine Frage ist in Bezug auf die Variablen x und y Bereich in der rekursions-Baum...die werden x-und y-Bereich gelten nur für die Funktionen, die in dieser spezifischen Phase in der rekursions-Baum? oder wenn ich den Aufruf von doSomething() erneut, wenn das Kind doSomething() in der rekursions-Baum redeclares x und y, wird es einen reset der Eltern x-und y-Variablen so gut oder ist es ein ganz neuer x-und y-Variablen gültig ist, für die Bühne in der rekursions-Baum nur?
- für die erste Frage, wie die Leute sagten, es benutzt seinen eigenen stack, so dass die variable nicht ändern. jede Rekursion-Funktion hat Ihren eigenen Wert von x und y. ich die foo Fall, die wir abnehmen minus 1 für jeden Anruf anders ist es, von der ersten Frage
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja.
Nicht.
Ja.
Edit 1:
Dieses Beispiel sollte hilfreich sein.
Ausgabe:
Beachten Sie die Adresse von
num
anders und jeder Aufruf hat seinen eigenen Wertnum
.Ideone
Jedem Anruf bekommt seine eigene Kopie der Variablen. Die Zuweisung an die Kopie in einem Funktionsaufruf hat keine Wirkung auf die Versionen in irgendeiner anderen Funktion aufrufen. Das ist, warum die Rekursion hat die Kommunikation zwischen "Stufen", indem Argumente und gibt einen Wert zurück.
ja, x und y sind stack-Variablen, und damit unabhängig sind, zwischen jedem Aufruf. Eine frische, stack-basierte x-und y-Achse werden erstellt für jeden Aufruf
doSomething
.Wenn Sie wollte, dass Sie die gleiche variable bei jedem Aufruf, Sie sollten erklären Ihnen
static
static
. Aber fast immer, dass wäre eine sehr schlechte Idee.Jedes mal, wenn eine Funktion aufgerufen wird, gibt es neue lokale Variablen
x
undy
erstellt, die unabhängig von jedem anderen Aufruf der Funktion. Dies ist, was macht lokalen Variablen unterscheidet sich von globalen Variablen.Übergeben Sie x + y-Wert in die Funktion doSomething(). Dies bedeutet, dass die Funktion stack doSomething() Zugriff auf eine lokale variable j mit den Wert aus der Funktion unten auf den Stapel zu, was x + y ergibt (ich.e die Funktion, die Sie nannte). Da diese variable ist vollständig unabhängig von der übergeordneten Funktion, ändern Sie seinen Wert keine Auswirkung auf Variablen, die unten auf dem Stapel.
Wenn, jedoch, Sie wollen j genau die gleiche variable wie in der übergeordneten Funktion, dann können Sie etwas tun:
Beachten Sie die & nach dem Doppel, das sagt dem compiler, dass die Funktion übernimmt den Wert, der eine doppelte, indem Sie seine Adresse, die aufgerufen wird, angemessen genug, die übergabe von Adresse. Hier, in der jedes Kind doSomething() j ist ein alias für die variable willChange in der Funktion unten auf dem Stapel.
Wenn Sie möchten, ändern Sie x und y, die speziell dann vielleicht etwas tun, wie