Zusammenfassung von drei Möglichkeiten zur Implementierung der Rekursion in PHP

伊谢尔伦
Freigeben: 2023-03-12 09:58:01
Original
1052 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich die drei grundlegenden Methoden zur Implementierung der Rekursion in PHP vorgestellt, einschließlich der Verwendung von Referenzen als Parameter, der Verwendung globaler Variablen und der Verwendung statischer Variablen zur Implementierung der Rekursion. Abschließend werde ich Ihnen auch relevante Beispiele beifügen PHP. Freunde, die es brauchen, können sich auf

Rekursive Funktion beziehen, eine Art von Funktion, die wir häufig verwenden. Die grundlegendste Funktion ist, dass die Funktion sich selbst aufruft, aber sie muss vor dem Aufruf aufgerufen werden selbst. Es gibt bedingtes Urteil, andernfalls wird es auf unbestimmte Zeit aufgerufen. Mit welchen Methoden können rekursive Funktionen implementiert werden? In diesem Artikel werden drei grundlegende Möglichkeiten aufgeführt. Um es zu verstehen, ist ein gewisses Maß an Grundwissen erforderlich, einschließlich des Verständnisses globaler Variablen, Referenzen und statischer Variablen sowie des Verständnisses ihres Umfangs. Rekursive Funktionen sind auch eine gute Technik zur Lösung unendlicher Klassifizierungsebenen. Wenn Sie an einer unendlichen Klassifizierung interessiert sind, lesen Sie bitte PHP, um mithilfe rekursiver Funktionen eine unendliche Klassifizierung zu erreichen. Ich bin es gewohnt, komplexe Wahrheiten in Laienbegriffen zu erklären. Wenn Sie es wirklich nicht verstehen, schauen Sie bitte im Handbuch nach.

Referenzen als Parameter verwenden

Unabhängig davon, ob Referenzen Parameter sind oder nicht, müssen wir zunächst verstehen, was eine Referenz 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 erledigen 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;

}
Nach dem Login kopieren

Das obige Beispiel ist sehr einfach. Wenn die Bedingung wahr ist, wird durch die Übergabe der Referenz von result an die Funktion jede Rekursion generiert Das a wird zum Ergebnisarray result hinzugefügt. Daher ist das in diesem Beispiel generierte $result-Array Array ( [0] => 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 das ist nicht der Fall, 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.

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;
}
Nach dem Login kopieren

Verwendung statischer Variablen

statisch sehen wir oft in Klassen, heute verwenden wir es 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();
Nach dem Login kopieren

Was ist das Ausführungsergebnis dieses Codes? Ist es 00000? Definitiv nicht. Es ist 01234. Erstens, wenn test() zum ersten Mal aufgerufen wird, initialisiert static $count. Nach jeder weiteren Ausführung wird der Wert von $count beibehalten und nicht mehr initialisiert, was dem direkten Ignorieren des Satzes static $count=0; entspricht.

Daher kann man sich 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;
}
Nach dem Login kopieren

Zusammenfassung

Die sogenannte rekursive Funktion konzentriert sich darauf, wie mit dem Funktionsaufruf selbst umgegangen wird und wie sichergestellt werden kann, dass die erforderlichen Ergebnisse angemessen „übertragen“ werden können " zwischen Funktionen. Natürlich gibt es auch rekursive Funktionen, die keine Werteübertragung zwischen Funktionen erfordern, zum Beispiel:

function test($a=0){
  $a++;
  if ($a<10) {
    echo $a;

    test($a);
  }
}
Nach dem Login kopieren

Angesichts einer solchen Funktion müssen wir uns darüber keine Sorgen machen. Übrigens kann ein tiefes Verständnis der Variablenreferenzen einen großen Beitrag zur Lösung dieser Art von Problemen leisten.

Abschließend möchte ich Ihnen eine Methode zur Implementierung von Rekursion und unendlicher Klassifizierung in PHP vorstellen. Die spezifische Implementierungsmethode ist wie folgt:

<?php
echo "<pre class="brush:php;toolbar:false">";
$area = array(
array(&#39;id&#39;=>1,&#39;area&#39;=>&#39;北京&#39;,&#39;pid&#39;=>0),
array(&#39;id&#39;=>2,&#39;area&#39;=>&#39;广西&#39;,&#39;pid&#39;=>0),
array(&#39;id&#39;=>3,&#39;area&#39;=>&#39;广东&#39;,&#39;pid&#39;=>0),
array(&#39;id&#39;=>4,&#39;area&#39;=>&#39;福建&#39;,&#39;pid&#39;=>0),
array(&#39;id&#39;=>11,&#39;area&#39;=>&#39;朝阳区&#39;,&#39;pid&#39;=>1),
array(&#39;id&#39;=>12,&#39;area&#39;=>&#39;海淀区&#39;,&#39;pid&#39;=>1),
array(&#39;id&#39;=>21,&#39;area&#39;=>&#39;南宁市&#39;,&#39;pid&#39;=>2),
array(&#39;id&#39;=>45,&#39;area&#39;=>&#39;福州市&#39;,&#39;pid&#39;=>4),
array(&#39;id&#39;=>113,&#39;area&#39;=>&#39;亚运村&#39;,&#39;pid&#39;=>11),
array(&#39;id&#39;=>115,&#39;area&#39;=>&#39;奥运村&#39;,&#39;pid&#39;=>11),
array(&#39;id&#39;=>234,&#39;area&#39;=>&#39;武鸣县&#39;,&#39;pid&#39;=>21)
);
function t($arr,$pid=0,$lev=0){
static $list = array();
foreach($arr as $v){
if($v[&#39;pid&#39;]==$pid){
echo str_repeat(" ",$lev).$v[&#39;area&#39;]."<br />";
//这里输出,是为了看效果
$list[] = $v;
t($arr,$v[&#39;id&#39;],$lev+1);
}
}
return $list;
}
$list = t($area);
echo "<hr >";
print_r($list);
?>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonZusammenfassung von drei Möglichkeiten zur Implementierung der Rekursion in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage