Script bricht Rekursion ab

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
miv
User
Beiträge: 3
Registriert: Dienstag 12. Juni 2007, 19:25

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Solange das Limit hochsetzen und Stack "verbrauchen" bis es kracht!? :-)

Der Stack ist unter Linux normalerweise 8 MB gross.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

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.
miv
User
Beiträge: 3
Registriert: Dienstag 12. Juni 2007, 19:25

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
:-(
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Die alternative zu Stackless Python wäre das ganze Iterativ oder mit eigenem Stack zu implementieren.
miv
User
Beiträge: 3
Registriert: Dienstag 12. Juni 2007, 19:25

@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
Antworten