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 }