Heim  >  Artikel  >  Backend-Entwicklung  >  Drei grundlegende Methoden zur Implementierung der Rekursion in PHP

Drei grundlegende Methoden zur Implementierung der Rekursion in PHP

墨辰丷
墨辰丷Original
2018-06-07 14:28:352972Durchsuche

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 Für rekursive Betriebsfähigkeiten können Freunde in Not auf

Referenzen als Parameter verwenden

verweisen. Unabhängig davon, ob Referenzen als Parameter verwendet werden oder nicht, müssen Sie zunächst verstehen Was ist eine Referenz? 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 erwägen die Verwendung von Referenzen als Parameter, um eine Brücke für 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;

}

Verwendung globaler Variablen

Verwendung globaler Variablen zur Vervollständigung rekursiver Funktionen. Stellen Sie bitte sicher, dass Sie verstehen, was globale Variablen sind. Die innerhalb der Funktion deklarierte globale Variable ist lediglich eine Referenz auf die gleichnamige externe Variable. 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;
}

Verwendung statischer Variablen

Statische Variablen sehen wir oft in Klassen und heute verwenden wir sie 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 Codes? Ist es 00000? Auf keinen Fall. 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. Dies entspricht dem direkten Ignorieren des Satzes static $count=0;.

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“ wird für jede Rekursion beibehalten.

function test($a=0){
  static $result=array();
  $a++;
  if ($a<10) {
    $result[]=$a;
    test($a);
  }
  return $result;
}

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 zwischen ihnen „übertragen“ werden können Natürlich gibt es auch rekursive Funktionen, die Werte zwischen Funktionen übertragen müssen, zum Beispiel:

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

    test($a);
  }
}

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 lautet 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);
?>

Zusammenfassung: Das Obige ist der gesamte Inhalt von Ich hoffe, dass er zum Lernen aller nützlich sein kann.

Verwandte Empfehlungen:

Detaillierte Erklärung zum Ändern der Hosts-Datei in PHP

So implementieren Sie die asynchrone Ausführung von Skripten in PHP

PHP implementiert die Definition und Verwendung der Redis-Cache-Klasse

Das obige ist der detaillierte Inhalt vonDrei grundlegende Methoden zur Implementierung der Rekursion in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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