Prozess beendet mit exit-code -1073741571

Habe ich eine Rekursion Funktion, die Suche nach Eulerian Path. Ich glaube nicht, dass die definition der Funktion relevant ist (aber wenn jemand so denkt, werde ich es einfügen auch).

Das problem ist, dass wenn ich auf die Funktion mit einem großen graph, erhalte ich die folgende bekannte Fehler: Absturz mit Laufzeitfehler: maximum recursion depth exceeded in cmp

Sogar ohne die oben genannten Frage, ich weiß, ich muss zunehmen Rekursion Grenze mit den folgenden Befehlen

import sys
sys.setrecursionlimit(5000)

Das problem ist, wenn egal welche Nummer ich verwende, ich erhalte entweder die Maximale Rekursion Fehler oder mein Programm nur die halte mit keine Ausgabe auf dem Bildschirm, aber: Prozess beendet mit exit-code -1073741571. Ich habe versucht, google für diesen code, und das einzige problem, das ich finden konnte, war das problem in Ruby. Irgendeine Idee, wie ich dieses problem überwinden können.

Falls dies relevant ist, bin ich auf Windows 8 64 bit, ich habe sehr viel RAM und ich habe 64bit python.

Nur weil aus irgendeinem Grund diese Frage erhielt einige Aufmerksamkeit vor kurzem, möchte ich betonen, dass ich nicht in der Lage war zu finden, die Lösung für das problem. Nach hoffnungslos versuchen das problem zu lösen gab ich auf und schrieb es ohne Rekursion. Auch war es ärgerlich, aber ich verbrachte viel weniger Zeit mit dem Neuschreiben des gesamten Algorithmus, als ich ausgegeben habe dieses problem untersucht. Ich möchte auch erwähnen, dass ich nicht der vorherigen Rekursion-code, so dass ich nicht in der Lage, das problem zu replizieren.

  • Durch eine chance, Ihr Programm benötigen-Optimierung?
  • CPython nicht optimieren tail-Rekursion, so versuchen zu vermeiden, mit es so weit.
  • Wie viele Kanten in den Graphen?
  • Da gibt es nichts zu optimieren gibt. Die einzige Sache, die erforderlich sind, optimiert werden, ist zu ändern Rekursion zur while-Schleife 🙂
  • es gibt etwa 4500 Kanten im graph
  • Wenn Sie das überschreiten der maximalen Rekursionstiefe, ist es sehr wahrscheinlich, dass Ihr Programm in eine Endlosschleife loop, in welchem Fall die änderung der Rekursion beschränken, werden überhaupt keine Hilfe. Sie müssen herausfinden, was Sie machen sollte, Ihr Programm vollständig sein rekursive Schritt und versuchen zu verstehen, warum das nicht geschieht.
  • Es ist nicht unendlich. Getestet habe ich es auf viele große Grafiken und es funktioniert einwandfrei. Irgendwann wird es fertig. Das problem ist, dass in meinem Fall setrecursionlimit funktioniert nicht.
  • docs.python.org/2/library/sys.html#sys.setrecursionlimit sagt: sys.**setrecursionlimit**(Grenzwert) - die maximale Tiefe von der Python-interpreter-stack zu begrenzen. Dieses limit verhindert eine unendliche Rekursion verursachen einen überlauf des C-stack und stürzt Python. Die höchste mögliche Grenze ist Plattform-abhängig.
  • dies ist ein nettes Angebot, aber was war dein Punkt?
  • Möglicherweise sind Sie versucht, um den Grenzwert größer ist als der Umwelt ermöglicht. Dazu führen würde, dass setrecursionlimit 'nicht für Sie arbeiten'.
  • vielen Dank für die Klarstellung. Der Fehler mit zu hoher Rekursion Grenze sieht anders aus und ich habe bereits überprüft, dass meine Rekursion limit ist viel höher als ich bin hier.
  • Ohne den source-code (und ohne Kenntnisse über python, eigentlich), kann ich nur raten... hier ist Also meine nächste Vermutung: wahrscheinlich hast du die gegenseitige Rekursion, also die Funktion A ruft B auf und B ruft Ein für jeden Schritt der Lösung? Das würde doppelte der tatsächlichen Anzahl von Anrufungen.
  • Ja, ich weiß. Das problem ist, dass es keinen code mehr. Nach hoffnungslos versuchen das problem zu lösen gab ich auf und schrieb es ohne Rekursion. Aber es war nicht Ein Anruf, B. Es wurde nur eine Funktion rekursiv sich selbst aufrufenden.
  • Möglicherweise war es nicht nur eine Rekursion in die Tiefe, aber so etwas wie eine Rekursion Datenvolumen? Ich würde versuchen, ein Testprogramm zu schreiben, um zu gehen einer bestimmten Tiefe nach unten in eine Rekursion so einfach wie möglich anf testen, wie weit würde es gehen. Dann fügen Sie einige großen Satz von Variablen zu halten, auf jeder Ebene und erneut testen... Aber sobald Sie gelöscht, den code gibt es kein Problem zu testen mehr.

Schreibe einen Kommentar