Stack Overflow bei Rekursiver Funktion
-
Hallo,
ich habe das Problem, dass ich bei einer rekursiven Suchfunktion immer einen Stackoverflow bekomme, da das ganze schon sehr tief geht. Nun wie kann ich den Oveflow jetzt vermeiden? Kann ich irgendwie einen zusätzlichen Stack anfordern, kann man Rekursionen (z.B. die Tiefensuche) so programmieren, dass eine bestimmte Tiefe eingehalten wird? Oder hab ich da einfach Pech (was ich jetzt mal nicht hoffe)?
-
Bei grossen Datenstrukturen solltest du Dinge wie Tiefensuche nicht rekursiv sondern iterativ implementieren.
Aber einer grossen Anzahl an Rekursionsaufrufen hast du auf so ziemlich allen Systemen Probleme.*Edit
Funktioniert deine Suchfunktion denn auf kleineren Datenstrukturen?
-
Mehr Stack anfordern geht nicht, der ist immer auf ca. 1MB begrenzt (Windows). Zeig mal deine Suchfunktion, da kann man bestimmt optimieren.
-
Kannst den Stack simulieren.
find(root,name) toDo.push(root) while(not toDo.isEmpty()) this=toDo.pop() foreach(child in this.childs) if(child.name==name) return yield throw display child else toDo.push(child)
Wenn toDo ein Stack ist, haste Tiefensuche. Wenn er eine Queue ist, haste Breitensuche.
Und toDo kann die ganzen 16G Deines Rechners ausnutzen, liegt ja auf dem Freispeicher.