Jetzt anmelden...

Name
Passwort
Registrieren

PHP Tutorial #16

Rekursive Funktionen in PHP

Eine rekursive Funktion ist eine Funktion, die sich selbst wiederaufruft. Rekursive Funktionen sind eine sinnvolle alternative Lösungsstrategie zu den klassischen Schleifen. Es lohnt sich, darüber Bescheid zu wissen.

Kommentare [0]

Stefan 25.04.2019

Infos zum Artikel

Kategorie PHP
Autor Stefan
Datum 25.04.2019

Schnelles Code-Beispiel

$x = 0;
rekursiv();

function rekursiv(){
    global $x;
    echo $x++ . " ";

    if($x < 10){
        rekursiv(); // Recursive call
    }
}

// 0 1 2 3 4 5 6 7 8 9

Unterschied iterativ und rekursiv

Wenn wir ein bestimmtes Problem durch einen Algorithmus lösen wollen, stehen uns zwei Vorgehensweisen zur Verfügung. Beide unterscheiden sich dadurch, auf welche Weise Aktionen wiederholt werden:

  • iterativ: Wir führen eine Aktion mithilfe von Schleifen wiederholt durch.
  • rekursiv: Die Wiederholung der Aktion erfolgt dadurch, dass sich eine Funktion (mehrmals) selbst aufruft.

Die klassische iterative Variante mit einer Schleife sieht zum Beispiel so aus:

$x = 7;

while($x > 0){
    echo $x-- . " ";
}

Eine ganz normale while-Schleife. Die Anweisung innerhalb der Schleife wird solange wiederholt, bis die Schleifenbedingung nicht mehr erfüllt ist. Das Ergebnis sieht so aus:

7 6 5 4 3 2 1

Beispiel Rekursive Funktion

Wie lässt sich dieser Vorgang nun rekursiv durchführen?

Hierzu müssen wir eine Funktion schreiben, die sich selbst aufruft. Diese Funktion wird dann als rekursive Funktion bezeichnet.

Jede rekursive Funktion muss dabei eine Verzweigung als Abbruchbedingung beinhalten, damit die Rekursion irgendwann auch wieder beendet wird. Ansonsten laufen wir in eine Endlosschleife. Wäre nicht so gut :-)

Eine rekursive Funktion, die dem Schleifenbeispiel von oben entspricht, sieht so aus:

$x = 7;
doIt($x);

function doIt(&$x){
echo $x-- . " ";

    if($x > 0){
        doIt($x); // Rekursion!
    }
}

Ok, was ist hier los? Wir übergeben die Variable $x mit dem Wert 7 als Referenz der Funktion doIt(). Innerhalb der Funktion wird der Wert von $x um 1 verringert ($x--) und mit echo am Bildschirm angezeigt.

Als nächstes wird mit der if-Verzweigung geprüft, ob $x noch größer ist als 0. Wenn das so ist, kommt es zur Rekursion: Die Funktion ruft sich selbst auf ($x wird dabei als Argument übergeben).

Schachtelungstiefe

Wenn eine Funktion sich selbst aufruft, kommt es zur Verschachtelung. Bei jedem neuen Funktionsaufruf nimmt die Schachtelungstiefe zu.

PHP rekursive Funktion

Erst wenn im letzten Funktionsdurchlauf $x auf 0 gesetzt wird und damit $x > 0 false ist, wird es keine weitere Rekursion geben!

Übungen

einfach

Was wird am Bildschirm angezeigt?

$counter = 0;

function niceDay(){

    global $counter;
    $counter++;
    echo $counter;

    if($counter < 3){
        niceDay();
    }

}

niceDay();
Lösung ein-/ausblenden

mittel

Was gibt der folgende Code am Bildschirm aus?

$str = "Flash Gordon";
$n = 0;

fkt1($str, $n);

function fkt1($str, &$n){

    switch($str){
        case "Flash Gordon":
        $n = 1;

        case "Mandrake":
        $n = 2;
        break;

        case "Phantom":
        $n = 3;
    }

    fkt2($n);

}

function fkt2(&$n){

    $n++;
    if($n != 5){
        echo $n;
        fkt2($n);
    }
}
Lösung ein-/ausblenden

schwer

Wandeln Sie die folgende Iteration mit Schleife in eine Rekursion um:

for($i = 1; $i < 11; $i++){
    if(($i / 2) > 3){
        echo $i . " <br> ";
        }
}

// 7 8 9 10
Lösung ein-/ausblenden

Kommentar schreiben

Nur angemeldete Benutzer können kommentieren.

Alle Kommentare

Es gibt bislang noch keine Kommentare zu diesem Thema.

Verzweigungen

Ohne Verzweigungen wäre kaum ein sinnvolles Programm möglich.

Rekursive Funktionen

Eine rekursive Funktion ist eine Funktion, die sich selbst wiederaufruft.

PHP einrichten

Erfahren Sie, wie einfach es ist, PHP auf unserem lokalen System startklar zu machen.

FALCONBYTE.NET

Handmade with 🖤️

© 2018, 2019 Stefan E. Heller

Impressum | Datenschutz

facebook programmieren lernen twitter programmieren lernen youtube programmieren lernen