PHP Funktion rekrusiv aufrufen
paul1
- php
Hallo, ich möchte eine Funktion rekursiv ausführen... klappt aber nicht:
function test($a, $b, $c=null) {
$retval = $a + $b;
if ($c===null) return $retval;
else test($retval, $c);
}
echo 'test='.test(1,2);
echo '<br />';
echo 'test='.test(1,2,3);
Ich hätte erwartet, dass beim ersten Aufruf 3 rauskommt (tut es auch) und biem zweiten Aufruf 6 (stattdessen kommt nichts). Warum?
Paul
Hallo paul1,
else test($retval, $c);
(stattdessen kommt nichts). Warum?
Wie soll das Ergebnis der Rekursion eine Ebene weiter nach oben gelangen? Du gibst nichts zurück und bekommst auch nichts.
Die Frage, warum Du diese Aufgabe merkwürdigerweise rekursiv lösen willst, verkneife ich mir. Ich nehme mal an, dass das eigentliche Programm anders aussieht.
Rolf
Moin
Wie soll das Ergebnis der Rekursion eine Ebene weiter nach oben gelangen? Du gibst nichts zurück und bekommst auch nichts.
So läufts erstmal, danke.
function test($a, $b, $c=null) {
$retval = $a + $b;
if ($c===null) return $retval;
//else test($retval, $c);
else return test($retval, $c);
}
echo 'test='.test(1,2);
echo '<br />';
echo 'test='.test(1,2,3);
Aber was, wenn ein optionaler vierter Wert übergeben werden soll?
Die Frage, warum Du diese Aufgabe merkwürdigerweise rekursiv lösen willst, verkneife ich mir. Ich nehme mal an, dass das eigentliche Programm anders aussieht.
natürlich
Hallo paul1,
Aber was, wenn ein optionaler vierter Wert übergeben werden soll?
Suchst Du vielleicht nach einer variadischen Funktion? Gibt's seit PHP 5.6 mit der ... Syntax und vorher mit func_get_args().
(Warum heißt die so? Duadisch: 2 Parameter. Triadisch: 3 Parameter. Variadisch: variable Anzahl Parameter)
Die ... Operation kennt man in JavaScript als Rest und Spread-Operator, je nach Art des Einsatzes.
Rolf
Schau ich mir an. Besten Dank
Lieber paul1,
was willst Du denn wirklich erreichen, wofür Du eine rekursive Funktion zu benötigen meinst?
echo 'test='.test(1,2); echo '<br />'; echo 'test='.test(1,2,3);
Du verwendest einmal zwei, und einmal drei Parameter für den Funktionsaufruf. Warum diese variable Anzahl an Werten?
Liebe Grüße
Felix Riesterer