paul1: PHP Funktion rekrusiv aufrufen

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

  1. 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

    --
    sumpsi - posui - obstruxi
    1. 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

      1. 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

        --
        sumpsi - posui - obstruxi
        1. Schau ich mir an. Besten Dank

  2. 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