Tom: Verständisfrage Rekursion

Beitrag lesen

Hello,

mein PHP-Skript liefert mir zwar das Ergebnis, das ich erwarte. Dennoch fühle ich mich damit unwohl, weil ich nicht genau weiss, was passiert ;(

function flatten_array (&array){

global $my_new_array;
foreach ($array as $key => &$value){
  $my_new_array[$key] = $value['something'];
  if ($value['children']) {
   flatten_array($value['children']);
  }
}
return $my_new_array;
}

function test (){
global $my_old_array;
return flatten_array($my_old_array);
}

  
  
Du benutzt eine hässliche Abfragemethode, ob es ['children'] gibt, bzw. ob $value ein Skalar oder ein Array ist.  
  
Außerdem ist die Gefahr sehr groß, dass Du im Ergebnisarray bereits vorhandene Elemente wieder überschreibst, wenn der der Schlüssel in unterschiedlichen Zweigen mehrfach vorkommt.  
  
  
  

> Wie läuft das ab? 'Wartet' die Funktion test(), bis die Funktion flatten\_array() irgendwann irendwas zurückgibt? Oder ist das hier grundlegend falsch?  
  
"Warten" ist hier ein irreführender Ausdruck. In einem Single-Thread-System gibt es immer nur eine aktuelle Programmstelle, die abgearbeitet wird. Der Programmzeiger wird also durch die Steuerinformationen strukturiert durch die Programmteile geführt. Unterbrechungen lassen wir mal außer Betracht.  
  
Wenn Du also eine rekursive Funktion hast, dann wird der Programmzeiger in die Startfunktion gestellt, eine neue Instanz der Funktion im Speicher erzeugt, der Programmzeiger nachgeführt und diese Instanz abgearbeitet. Führt die Abarbeitung direkt zum Ergebnis, wird \_keine\_ neue Instanz mehr erzeugt, wird das Ergebnis zurückgegeben und der Speicher für die abgearbeitete Instanz wieder freigegeben.  
  
Die Funktion Test "wartet" also nicht, sondern der Programmzeiger ist einfach noch nicht zurück von seinem Marsch durch den Speicher.  
  
Anders ist das in Multithreading-Umgebungen. Da muss man sehr genau wissen, ob ein neuer Thread (Programmzeiger) aufgemacht wird, wenn eine Funktion aufgerufen wird.  
  
  
  
  
  
Liebe Grüße aus dem schönen Oberharz  
  
  
Tom vom Berg  
![](http://selfhtml.bitworks.de/Virencheck.gif)  
  

-- 
 ☻\_  
/▌  
/ \ Nur selber lernen macht schlau  
<http://bergpost.annerschbarrich.de>