rekursive funktion

Diskutiere rekursive funktion im Web & Grafik Forum im Bereich Internet & Telekomunikation Forum; hab gerade nen kleines problem, welches ich mir im moment nicht erklären kann. will ne tabelarische ansicht oder sowas aus nem dynamischen...
  • rekursive funktion Beitrag #1
O

ORiGiN

Bekanntes Mitglied
Dabei seit
03.03.2005
Beiträge
181
Reaktionspunkte
0
Ort
oldenburg
hab gerade nen kleines problem, welches ich mir im moment nicht erklären kann.
will ne tabelarische ansicht oder sowas aus nem dynamischen mehrdimensionalen array erstellen. nur leider haperts gerade am setzen des endtags für z.B ne tabelle oder sowas. schaut euch das mal an:

function makefilelist($files = array(), $init = true)
{
if ($init)
$list .= ' start <br />';
foreach ($files as $key => $value)
{
if(is_array($value))
{
$list .= makefilelist($value, false);
}
elseif ($value)
{
$list .= $value;
}
}
$list .= ' end <br />';
return $list;
}
leider bekomm ich hier in der ausgabe fast bei jedem aufruf nen "end" zu sehen, was ich mir irgendwie nicht erklären kann... vielleicht kann mir ja jemand sagen, wo der denkfehler liegt.

danke schonmal fürs lesen
 
  • rekursive funktion Beitrag #2
the_viper

the_viper

Bekanntes Mitglied
Dabei seit
27.11.2000
Beiträge
1.977
Reaktionspunkte
0
kann es vllt sein, das der ansatz so nicht funktioniert? wenn ich die rekursion im kopf durchgehe, dann wird beim kleinsten array-element nur der erste eintrag des unterarrays zurückgegeben, nicht die gesamte liste.
 
  • rekursive funktion Beitrag #3
O

ORiGiN

Bekanntes Mitglied
Dabei seit
03.03.2005
Beiträge
181
Reaktionspunkte
0
Ort
oldenburg
doch er durchläuft das komplette array. ich finde es nur komisch, dass er öfters mal beim ende der funktion ankommt, obwohl die funktion sich ja vorher selber aufruft... hab aber auch nicht wirklich erfahrung mit rek. funktionen. fehlt nach dem erneuten aufruf nen "break" oder sowas?
warum verlässt er öfters die foreach-schleife?
 
  • rekursive funktion Beitrag #4
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Die rekursive Funktion ruft sich ja selbst auf, das Ding geht also sozusagen in die Tiefe, bis die tiefste Ebene erreicht ist. Dieser Aufruf macht eine Ausgabe, schreibt sein end, und beendet sich dann. Dann läuft die Funktion auf der zweittiefsten Ebene weiter und hängt ebenfalls ihr end an, bevor sie beendet wird. Das start siehst du deshalb nicht überall, weil es nur geschrieben wird, wenn $init true ist. Für solche Testzwecke führe ich oft gerne einen zusätzlichen Paramter "rekursionstiefe oder so mit", der beim ersten Aufruf mit 0 übergeben wird, und in der Funktion der Rekursion um eins erhöht wird. Am Anfang und Ende der Funktion wird dann "Start" bzw. "End" mit der aktuellen Tiefe ausgegeben; so sieht man genau, wie die Rekursion arbeitet, und wo evtl. etwas falsch läuft.
 
  • rekursive funktion Beitrag #5
O

ORiGiN

Bekanntes Mitglied
Dabei seit
03.03.2005
Beiträge
181
Reaktionspunkte
0
Ort
oldenburg
danke dir für die erläuterung.
ja, den anfang der rekursion lässt sich relativ leicht ausmachen indem eben die init variable innerhalb der funktion auf false gesetzt wird... nur wie finde ich heraus, wann das ende ereicht ist?
wäre es ein eindimensionales array wäre das ende leicht mit sizeof() oder mit einer ähnlichen funktion rauszubekommen, nur leider weiss ich vorher nicht wie tief das array ist, da es vorher aus der jeweiligen verzeichnisstruktur dynamisch erzeugt wird.
die ebene mit ausgeben zu lassen ist zu testzwecken gut, aber hilft mir bei meinem problem meines wissens nicht weiter.
ich sitze seit stunden an dem problem und so langsam bin ich frustriert ;)
aber vielleicht hat ja jemand nen tip für mich
 
  • rekursive funktion Beitrag #6
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Ich denke, dass du deine init-Variable gar nicht brauchst. Du läufst in einer Schleife einfach alle Array-Einträge durch; ist der Eintrag wieder ein Array, rufst du wie gehabt deine Funktion mit diesem Array als Parameter auf. Ist der Eintrag ein Dateiname, wird er ausgegeben. Die Rekursion beendet sich damit automatisch; an der tiefsten Stelle in einem Zweig gibt es keine Arrays mehr, also werden nur Dateinamen ausgegeben, und zur Ebene darüber zurückgekehrt. Sind auch in der Ebene alle Zweige durch, gehts wieder eine Ebene höher.
 
Thema:

rekursive funktion

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben