Seite 1 von 1

Script bricht Rekursion ab

Verfasst: Dienstag 12. Juni 2007, 19:33
von miv
Hallo!
Ich habe ein Script geschrieben, welches bei einem einfachen Brettspiel alle Züge ausprobiert, und so eine strikt dominante Strategie findet(Spieltheorie)
Wenn ich das Script komplexer mache, bricht das Script einfach ab.
(Musste über sys setrecursionlimit erstmal die Rekursion vertiefen...)
Ich schätze, in der aktuellen Version sollte er ca.1h rechnen.

Kann mir irgendwer helfen?

Schonmal danke,
Michael

Verfasst: Dienstag 12. Juni 2007, 19:38
von CM
Hallo und willkommen im Forum!

Sag' mal: Wie soll Dir jemand helfen, wenn Du uns keinerlei Informationen gibst wo das Problem liegen könnte? Schau' mal hier: http://www.python-forum.de/topic-1240.html als Info zum besseren Fragenstellen. Oder hier: http://www.lugbz.org/documents/smart-questions_de.html

Gruß,
Christian

Re: Script bricht Rekursion ab

Verfasst: Dienstag 12. Juni 2007, 19:40
von gerold
miv hat geschrieben:Musste über sys setrecursionlimit erstmal die Rekursion vertiefen...[...]Kann mir irgendwer helfen?
Hallo Michael!

Willkommen im Python-Forum!

``sys.setrecursionlimit`` hast du ja schon gefunden. Hast du ein Problem? Dann beschreibe es.

mfg
Gerold
:-)

Verfasst: Dienstag 12. Juni 2007, 20:10
von BlackJack
Das Rekursionslimit ist dazu da, dass der C-Stack nicht "überläuft". Man kann es hochsetzen, das hat aber keinen Einfluss auf den C-Stack. Wenn man das Limit also so hoch setzt, dass der C-Stack "überlaufen" kann, bricht das Programm dann einfach ab. Entweder mit einer Speicherzugriffsverletzung, oder weil der Stack irgend etwas im Datenbereich überschreibt.

Verfasst: Dienstag 12. Juni 2007, 20:34
von gerold
BlackJack hat geschrieben:Das Rekursionslimit ist dazu da, dass der C-Stack nicht "überläuft". Man kann es hochsetzen, das hat aber keinen Einfluss auf den C-Stack.
Hallo BlackJack!

Bitte werde etwas genauer. Das Rekursionslimit in Python ist 1000. Wie viel kann der C-Stack vertragen? Wie kriegt man das raus?

lg
Gerold
:-)

Verfasst: Dienstag 12. Juni 2007, 20:52
von BlackJack
Solange das Limit hochsetzen und Stack "verbrauchen" bis es kracht!? :-)

Der Stack ist unter Linux normalerweise 8 MB gross.

Verfasst: Dienstag 12. Juni 2007, 21:48
von Sr4l
Wenn es Probleme mit dem Stack gibt, dann schmeißt man ihn raus :-)

Mit StacklessPython ( http://www.stackless.com/ ) :-D

Also ich habe noch nie mit Stackless gearbeitet, aber genau diese Problematik und damit Vorteil von Stackless wird in dem Einsteiger Tutorial besprochen.

Verfasst: Dienstag 12. Juni 2007, 23:16
von miv
Das Problem ist ganz einfach erklärt:
Das Script hält einfach an.

Wenn ich denn Sys teil lösche, erhalte ich:
RuntimeError: maximum recursion depth exceeded
Aber wie gesagt, das habe ich dank Google schon gelöst

Ich arbreite mit DrPython, und da sehe ich rechts unten, wenn das Script läuft(zum Beispiel in einer Endlosschleife)
aber bei meinem Script tut sich nichst.
Es startet, probiert einige Strategien, und dann hört es auf, ohne fertig zu sein
:-(

Verfasst: Dienstag 12. Juni 2007, 23:34
von veers
Die alternative zu Stackless Python wäre das ganze Iterativ oder mit eigenem Stack zu implementieren.

Verfasst: Mittwoch 13. Juni 2007, 08:35
von miv
@veers
Wie kann ich einen eigenen Stack implementieren?

EDIT:
Hab das Problem jetzt Iterativ gelöst,
ist zwar imo keine schöne Lösung, aber immerhin.

DANKE,
Michael