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 BeispielBearbeiten

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

 1function 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:

 1function 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}