Ausgegebn wird lediglich die Summe der 2 Integer-Zahlen. Wie
realisiere ich die Funktion jedoch rekursiv ?
Hallo Rufat … damit deine Funktion rekursiv arbeitet musst du dir über folgende Dinge bewusst sein:
- Wie lange läuft die Rekursion, d.h. an welchem Punkt wird sie unterbrochen und gibt in umgekehrter Reihenfolge das Ergebnis zurück? und
- Was heißt überhaupt Rekursion?
Sinnvollerweise sollte deine Funktion nur einen Wert übergeben bekommen, nämlich die Zahl „n“, die als nächstes summiert wird. Die Rekursion kommt dann dadurch zustande, dass diese Zahl „n“ mit dem Ergebnis der Funktion mit dem Parameter „n-1“ addiert wird und zurückgegeben wird. An irgendeinem Punkt muss dieses ständige Aufsummieren natürlich enden. In deinem Fall gibt die Spezifikation „positive/natürliche Zahlen“ diesen „Abbruch“ an: Sobald dein „n“ den Wert 0 erreicht ist die letzte Stufe der Rekursion erreicht. Für den Fall n=5 würde das also so aussehen:
summe(5) -\> 5 + summe(5-1)
-\> 5 + (4 + summe(4-1))
-\> 5 + (4 + (3 + summe(3-1)))
-\> 5 + (4 + (3 + (2 + summe(2-1))))
-\> 5 + (4 + (3 + (2 + (1 + summe(1-1)))))
-\> 5 + (4 + (3 + (2 + (1 + (0))))
Die Null in der letzten Zeile signalisiert den Abbruch. Jetzt wird schrittweise von unten nach oben der Wert in der am weitesten links stehenden Klammer zurückgegeben und mit der „nächsthöheren“ Klammer addiert. Sind wir ganz oben angekommen ist die Rekursion vollständig beendet und es wird der Wert 5+4+3+2+1=15 zurückgegeben:
<?php function summe($n) {<br /> if($n \> 0)
return $n + summe($n-1);
else
return $n;
// return 0; hätte denselben Effekt
}
// Aufruf
echo summe(5); // --\> 15
?\>
Das wichtigste dass du dir zur Rekursion merken solltest ist, dass du a) immer ein Ende, also einen Zweig benötigst in dem kein Aufruf der Funktion selbst statt findet und b) dass Rekursion immer bedeutet, dass sich an irgendeiner Stelle die Funktion selbst aufruft, meist mit einem anderen Wert für den/die Parameter.
Ich hoffe ich konnte dir helfen und dir die Funktionsweise dieser Implementierungsform näher bringen!