Websiteentwicklung: PHP: Rekursion

Aus Wikibooks
Wechseln zu: Navigation, Suche

Websiteentwicklung PHP Rekursion

Was ist Rekursion?[Bearbeiten]

Rekursive Funktionen sind vereinfacht gesagt Funktionen, die in ihrer Ausführung sich selbst noch ein mal aufrufen mit einem veränderten Argument.

Ein Beispiel[Bearbeiten]

Hier ein kleines Beispiel zur Rekursion mit einer rekursiven PHP Funktion f() zur Berechnung der Fakultät einer ganzen Zahl:

 1 function f($i) 
 2 {
 3   if (!is_integer($i) or $i < 1) 
 4   {
 5     return "Fehler";
 6   }
 7 
 8   if ($i == 1) 
 9   {
10     return $i;
11   }
12   else 
13   {
14     /*
15       return $i * f(--$i);  
16       kann nicht verwendet werden, da --$i zuerst dekrementiert!!!
17     */
18     $temp = $i;
19     return $temp * f(--$i);
20   }
21 }

In Zeile 3 prüft die Funktion, ob der Aufrufparameter gültig ist und beendet sich, falls der Parameter keine ganze Zahl (is_integer) oder kleiner 1 ist. Die Zeile 8 enthält die Abbruchbedingung für die Rekursion: Sobald der Parameter 1 ist, liefert die Funktion 1 zurück (und ruft sich nicht mehr selbst rekursiv auf). Wird die Abbruchbedingung nicht erfüllt, erfolgt in Zeile 14 die eigentliche Rekursion durch Aufruf von f(--$i). Hier wird der Parameter $i zuerst dekrementiert, bevor er der Funktion übergeben wird. Das führt dazu, dass die Variable $i in der Zeile VOR Auswertung dekrementiert wird (an BEIDEN Stellen) - deshalb ist eine Zwischenvariable nötig. So wird - hoffentlich - sichergestellt, dass die Funktion einmal abbricht, wenn der Parameter < 2 wird.

Aufruf erfolgt dann z.B.:

1 $f = f(5);

Dieses einfache Beispiel kann auch als while-Konstrukt ohne Rekursion realisiert werden:

 1 function f($i) 
 2 {
 3   if (!is_integer($i) or $i < 1) 
 4   {
 5     return "Fehler";
 6   }
 7 
 8   $ret = $i;
 9   while ($i-- > 1)
10   {
11     $ret *= $i;
12   }
13 
14   return $ret;
15 }


Wikibooks buchseite.svg Zurück zu Reguläre Ausdrücke | One wikibook.svg Hoch zu PHP | Wikibooks buchseite.svg Vor zu PHP-Referenz