Heim >Backend-Entwicklung >PHP-Problem >Was ist die Methode zur Implementierung der Rekursion in PHP?
Die Art und Weise, wie PHP Rekursion implementiert, ist: 1. Verwenden Sie Referenzen als Parameter, der Code ist [$result[]=$a;test($a,$result)] 2. Verwenden Sie globale Variablen. Der Code ist [statisch $count=0;].
【Verwandte Lernempfehlung: php-Grafik-Tutorial】
php-Methode zur Implementierung der Rekursion ist:
1. Referenzen als Parameter verwenden
Unabhängig davon, ob die Referenzen als Parameter verwendet werden, Sie müssen zuerst verstehen, was ein Zitat ist? Eine Referenz bedeutet einfach, dass zwei Variablen mit unterschiedlichen Namen auf dieselbe Speicheradresse verweisen. Ursprünglich hatte jede Variable ihre eigene Speicheradresse und das Zuweisen und Löschen verlief auf eigene Weise. Okay, jetzt teilen sich die beiden Variablen eine Speicheradresse. $a=&$b; Was es tatsächlich bedeutet, ist, dass $a unabhängig von seiner ursprünglichen Speicheradresse denselben Raum mit $b teilen muss. Daher wirkt sich jede Änderung des gespeicherten Adresswerts auf beide Werte aus.
Funktionen machen ursprünglich ihre eigene Sache, auch wenn es sich um Funktionen mit demselben Namen handelt. Rekursive Funktionen berücksichtigen Referenzen als Parameter und werden zu einer Brücke, um den Datenaustausch zwischen zwei Funktionen zu bilden. Obwohl die beiden Funktionen scheinbar an unterschiedlichen Adressen arbeiten, arbeiten sie tatsächlich an derselben Speicheradresse.
function test($a=0,&$result=array()){ $a++; if ($a<10) { $result[]=$a; test($a,$result); } echo $a; return $result; }
Das obige Beispiel ist sehr einfach. Verwenden Sie a8d3621aa79a9a91ccf9b5181455c7fe6 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5 ] = > 6 [6] => 7 [7] =>
Was in diesem Beispiel interessanter ist, ist der Wert von echo a. Ich glaube, viele Leute denken, es sei 12345678910, aber in Wirklichkeit ist es nicht so, es ist 1098765432. Warum? Weil die Funktion die nächste Funktionsrekursion durchgeführt hat, bevor sie echoa ausführt. Die tatsächliche Ausführung von echo a erfolgt, wenn die Bedingung a < 10 nicht erfüllt ist. Echo a gibt das Ergebnis zurück. Für die obere Ebene beginnt nach der Ausführung der rekursiven Funktion die Ausführung von echo $a dieser Ebene usw.
Beispiel 2,
Die PHP-Referenz ermöglicht es zwei Variablen, auf denselben Inhalt zu verweisen, zum Beispiel $a = &$b; Das bedeutet, dass $a und $b auf dieselbe Variable verweisen.
Da $data im folgenden Beispiel als Referenz übergeben wird, werden die Daten immer akkumuliert.
function recursion(&$data = [], $i = 0) { if ($i < 10) { $data[] = $i; $i++; $this->recursion($data, $i); } return $data; } // 调用 $this->recursion(); // [0,1,2,3,4,5,6,7,8,9]
2. Verwenden Sie globale Variablen
Verwenden Sie globale Variablen, um rekursive Funktionen auszuführen. Bitte stellen Sie sicher, dass Sie verstehen, was globale Variablen sind. Die innerhalb der Funktion deklarierte globale Variable ist lediglich eine Referenz auf die externe Variable mit demselben Namen. Der Gültigkeitsbereich der Variablen liegt weiterhin im Gültigkeitsbereich dieser Funktion. Wenn Sie die Werte dieser Variablen ändern, ändern sich natürlich auch die Werte externer Variablen mit demselben Namen. Aber sobald & verwendet wird, ist die Variable mit demselben Namen keine Referenz mit demselben Namen mehr. Es ist nicht erforderlich, eine so tiefe Ebene zu verstehen, um globale Variablen zum Implementieren rekursiver Funktionen zu verwenden. Sie können rekursive Funktionen auf natürliche Weise verstehen, indem Sie die ursprüngliche Ansicht globaler Variablen beibehalten.
function test($a=0,$result=array()){ global $result; $a++; if ($a<10) { $result[]=$a; test($a,$result); } return $result; }
global Das Deklarieren von Variablen innerhalb einer Funktion ist nichts anderes als eine Referenz auf eine externe Variable mit demselben Namen. Der Gültigkeitsbereich der Variablen liegt weiterhin im Gültigkeitsbereich dieser Funktion. Wenn Sie die Werte dieser Variablen ändern, ändern sich natürlich auch die Werte externer Variablen mit demselben Namen.
function recursion($data = [], $i = 0) { global $data; if ($i < 10) { $data[] = $i; $i++; $this->recursion($data, $i); } return $data; } // 调用 $this->recursion(); // [0,1,2,3,4,5,6,7,8,9]
3. Verwenden Sie statische Variablen
Wir sehen statische Variablen oft in Klassen und verwenden sie heute in rekursiven Funktionen. Denken Sie an die Rolle von Static: Initialisieren Sie die Variable nur beim ersten Aufruf der Funktion und behalten Sie den Variablenwert bei.
Zum Beispiel:
function test(){ static $count=0; echo $count; $count++; } test(); test(); test(); test(); test();
Was ist das Ausführungsergebnis dieses Codeabschnitts? Ist es 00000? Auf keinen Fall. Es ist 01234. Wenn test() zum ersten Mal aufgerufen wird, wird $count statisch initialisiert. Nach jeder Ausführung bleibt der Wert von $count erhalten und wird nicht erneut initialisiert, was dem direkten Ignorieren des Satzes static $count= entspricht 0;.
Man kann sich also den Effekt der Anwendung von Statik auf eine rekursive Funktion vorstellen. Variablen, die als „Brücken“ zwischen rekursiven Funktionen verwendet werden müssen, werden statisch initialisiert, und der Wert der „Brückenvariablen“ bleibt für jede Rekursion erhalten.
function test($a=0){ static $result=array(); $a++; if ($a<10) { $result[]=$a; test($a); } return $result; }
Statische Variablen werden nur beim ersten Aufruf initialisiert. Existiert nur im lokalen Funktionsbereich, sein Wert geht jedoch nicht verloren, wenn die Programmausführung diesen Bereich verlässt.
function recursion($i = 0) { static $data = []; if ($i < 10) { $data[] = $i; $i++; $this->recursion($i); } return $data; } // 调用 $this->recursion(); // [0,1,2,3,4,5,6,7,8,9]
Verwandte Lernempfehlungen: php-Programmierung(Video)
Das obige ist der detaillierte Inhalt vonWas ist die Methode zur Implementierung der Rekursion in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!