Autor Beitrag
[r2d2]
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

WinXP
D5 Enterprise
BeitragVerfasst: So 03.08.03 12:22 
Hi

Ist es ohne weiteres möglich eine Porcedur durch sich selbst mehrmals aufrufen zu lassen? Muss man dabei irgendetwas beachten oder sollte es dabei eigentlich keine Probs geben? :?
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: So 03.08.03 12:30 
Normalerweise sollte es keine Probleme geben.. aber:
Irgendwann sind soviele Rücksprungadressen auf dem Stack abgelegt das dieser überläuft.. das hast Du die maximale Rekursionstiefe erreicht und es kommt zur Fehlermeldung (Stack overflow).
Das passiert aber eigentlich nur dann wenn man in eine Endlosschleife gerät, also keine korrekte Abbruchbedingung existiert.

MfG,
Tryer
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: So 03.08.03 14:43 
um das noch zu vervollständigen: Dein vorhanben nent man 'rekursion' und kann für äusserst leistungsfähige/effiziente algorythmen verwendet werden. Rekursion ist eines meiner liebling konzepte beim programmieren :D

_________________
mfg.
mâximôv
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: So 03.08.03 14:59 
maximus hat folgendes geschrieben:
Rekursion ist eines meiner liebling konzepte beim programmieren :D

Damit bist Du nicht allein 8)

MfG,
Tryer
UC-Chewie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 531

WinXP
D5 Ent
BeitragVerfasst: So 03.08.03 17:30 
Tryer hat folgendes geschrieben:
Das passiert aber eigentlich nur dann wenn man in eine Endlosschleife gerät, also keine korrekte Abbruchbedingung existiert.


Na ja, nicht unbedingt nur dann. Der Stack eines Prozesses ist soweit ich weiß, sofern nicht anders angegeben, 1 MB groß. Da kann der Inhalt von ca. 262000 Registern abgelegt werden. Sagen wir mal, bei jeder erneuten Rekursion werden 2 4Byte-Variablen (was recht wenig) ist, so läuft der Stack nach 131000 Operationen über. Stell dir vor, du durchsuchst eine Festplatte mit 100 GB, die voll sind, da kommen schnell mal 131000 Dateien & Ordner zusammen.
Mann sollte also bevor man Rekursion benutzt, überlegen, wie viele Schritte maximal man etwa brauchen könnte.
Aber ansonsten ist Rekursion eine Methode, mit wenig Code viel zu machen, z.B. in Baumstrukturen, wo man mit wenigen Zeilen eine beliebig (na ja, durch die Größe des Stack begrenzte) große Baumstruktur leeren kann.

_________________
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: So 03.08.03 17:58 
UC-Chewie hat folgendes geschrieben:
Stell dir vor, du durchsuchst eine Festplatte mit 100 GB, die voll sind, da kommen schnell mal 131000 Dateien & Ordner zusammen.
Mann sollte also bevor man Rekursion benutzt, überlegen, wie viele Schritte maximal man etwa brauchen könnte.

Wobei Du vergisst:
Der Stack wird auch immer wieder abgebaut, interessant ist also nur die maximale Schachtelungstiefe der Verzeichnisse, das hat nichts mit der Anzahl der Dateien insgesamt zu tun und sollte kein Problem darstellen.


MfG,
Tryer
UC-Chewie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 531

WinXP
D5 Ent
BeitragVerfasst: So 03.08.03 18:01 
Ja, richtig, daran hab ich bei der Hitze nicht gedacht. Ändert aber nix am Problem, es kann trotzdem passieren, dass der überläuft.

_________________
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Mo 04.08.03 09:13 
Ja, nach deiner Beschreibung aber nur, wenn er eine Verzeichnisstruktur mit 131000 Unterordnern hätte! :roll: ;)

Bei einer rekursiven File-Suche sollte also in keinem Fall ein Stack-Overflow auftreten (vorrausgesetzt es ist sauber programmiert)!

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
UC-Chewie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 531

WinXP
D5 Ent
BeitragVerfasst: Mo 04.08.03 10:24 
Hmm, wenn ich das so les, klingt das wohl logisch. Also Stack-Overflow höchstens dann, wenn pro Rekursionsschritt 100 kb gepusht werden. :lol:

_________________
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Mo 04.08.03 11:46 
Ein Beispiel wäre das Löschen einer einfach verketteten Liste, wo man per Rekursion bis zum letzten Element geht um dann auf dem Rückweg alle Elemente aufzulösen.

Dieser Fall ist aber auch fast auszuschliessen da es imho Schwachsinn wäre derart viele Elemente in einer einfach verketteten Liste zu speichern.

Bleibt also wirklich nur ein Fehler im Algorithmus um den Stackoverflow auszulösen :)

MfG,
Tryer