2012-04-15 4 views
0

Ich mache eine Algorithm-Klasse und ich baue eine Implementierung von Kosaraju's algorithm als Teil der Hausaufgabe.System.StackOverflowException zu viel Rekursion

Ich habe mehrere kleine Datensätze, in denen der Algorithmus die richtigen Ergebnisse liefert und gut funktioniert. Wenn ich jedoch meine Hausaufgabe mit 5.105.043 Kanten und 875.714 Knoten versuche, bekomme ich eine System.StackOverflowException, die zu sein scheint, weil es zu viel Rekursion gibt.

Diese Rekursion ist jedoch erforderlich, um die Frage zu lösen. Also, was ich frage, gibt es eine Möglichkeit, .Net zu konfigurieren, um mehr Rekursion zu ermöglichen?

+1

Wie tief * ist * deine Rekursion im Moment? –

+0

Wie erkenne ich das von der Ausnahme? Tut mir leid, dass ich mit dem Debuggen dieses Fehlers nicht zu vertraut bin. – baynezy

+0

Können Sie Ihr DFS nicht so ändern, dass es iterativ ist? – dvvrd

Antwort

3

Also was ich frage, gibt es eine Möglichkeit, .Net zu konfigurieren, um mehr Rekursion zu ermöglichen?

Die Rekursionsgrenze basiert auf der Stapelgröße, die für den aktuellen Thread zugewiesen wurde. Dies kann changed via editbin /stack für das Programm sein oder für einen bestimmten Thread bei der Konstruktion des Threads bearbeitet werden.

Das heißt, keine recursive algorithm can be switched to using a stack instead. Dies würde sich wahrscheinlich im Laufe der Zeit als wartungsfreundlicher erweisen, da es nicht länger davon abhängig wäre, dass ein sehr großer Stapel geeignet verarbeitet werden würde.

+0

Ich weiß es zu schätzen, dass es nicht ideal ist, in diesem Maße zu rekurrieren. Ich habe nur versucht, der Idee durch die Schlussfolgerung zu folgen. Ihr Rat zur Verwendung eines Threads löste es für mich, danke. – baynezy