Hannah: return bei Rekursiven Funktionen

Hey!!

Ich habe eine Rekursive Funktion und möchte beim letzten Durchlauf per "return" den wert erhalten der ermittelt wurde. Doch leider liefert mir "return" immer nur den wert des ersten Durchlaufs also noch bevor überhaupt eine Rekursion gestartet wurde.

Wie komme ich an den Wert des letzten Durchlaufs WENN kein weiterer Aufruf mehr "möglich" ist innerhalb der Funktion?

Danke!
Hannah

  1. Grüße,
    von deiner Beschreibung her hast du Rekursion nicht verstanden, du musst Rekursion verstehen bevor du Rekursion verstehen kannst.
    Und du musst Codebeispiele bringen damit Codebeispiele begutachtet und korrigiert werden können.
    MFG
    bleicher

    --
    __________________________-

    FirefoxMyth
    1. Hi,

      Ja das glaube ich auch ^^

      Es geht darum den Papa der Kinder zu ermitteln

        
        
      function father_of_child($id){  
        $re = qry("SELECT ref,id FROM menu WHERE id='".$id."'",true);  
        #echo "#ref".$re[0][ref]."-id".$re[0][id];  
        if ($re[0][ref] == 0) echo $re[0][id];  
        else father_of_child($re[0][ref]);  
      }  
        
      
      

      (Erläuterung zu qry(): qry() liefert mir direkt ein array mit den Inhalten des SELECTs)

      Im Prinzip habe ich das schon verstanden.
      Wenn ich anstelle des returns ein echo schreibe, bekomme ich was ich will.

      Hannah

      1. Hi,

        welche Werte kann "ref" annehmen?

        Gruß
        brillo

        1. Hi,

          welche Werte kann "ref" annehmen?

          Dahinter steckt ganz einfach eine MySQL-Tabelle.
          In etwa so

          id | ref | whatever
          1  | 0   | whatever
          2  | 0   | whatever
          3  | 1   | Kind von id 1
          4  | 1   | Kind von id 1
          5  | 4   | Kind von id 4, Kind von id 1
          6  | 4   | Kind von id 4, Kind von id 1
          7  | 0   | whatever

          Hannah

      2. Hi Hannah!

        Wenn du return verwendest, darfst du den Rückgabewert nicht nur in der äußersten Funktionsinstanz zurückgeben, sondern musst ihn durch alle Aufrufe durchreichen. Ein kleines weiteres return bewirkt Wunder. =)

        Außerdem solltest du Strings auch als solche Kennzeichnen.

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
        1. aaaah

            
          function father_of_child($id){  
            $re = qry("SELECT ref,id FROM menu WHERE id='".$id."'",true);  
            if ($re[0][ref] == 0) return $re[0][id];  
            else return father_of_child($re[0][ref]);  
          }  
          
          

          Danke!

          1. Hi Hannah!

            Danke!

            Bitte! =)

            Aber beachte auch meinen zweiten Hinweis:

            Außerdem solltest du Strings auch als solche Kennzeichnen.

            Du kannst ja auch einfach mal kurz das Fehlerverhalten deiner PHP-Installation etwas höher drehen. =)

            MfG H☼psel

            --
            "It's amazing I won. I was running against peace, prosperity, and incumbency."
            George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
            Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
      3. Hi!

        Es geht darum den Papa der Kinder zu ermitteln

        Und wozu brauchst du da Rekursion?

        if ($re[0][ref] == 0) echo $re[0][id];
          else father_of_child($re[0][ref]);

        Wenn der else-Zweig abgearbeitet wird, was passiert dann mit dem Rückgabewert von father_of_child()? Nichts, er wird verworfen. Anschließend ist die Funktion zu Ende und liefert ein null an ihren Aufrufer.

        Lo!

      4. Hi Hannah.

        Ich habe eine Rekursive Funktion [...]
        Es geht darum den Papa der Kinder zu ermitteln

        Wenn Du dafuer ne Rekursion brauchst, dann liegt in der Familie aber einiges im Argen. ;-)

        Was ich eigentlich sagen wollte: Deine Funktion (so sie denn repariert ist, das ist ja weiter unten nun geschehen) bestimmt nicht den Vater, sondern den "aeltesten Vorfahren". Du solltest ihr unbedingt(!) einen passenderen Namen geben.

        Viele Gruesse,
        der Bademeister