Seite 1 von 1
Countdown bricht ab(Testzwecke)
Verfasst: Mittwoch 24. August 2022, 17:17
von hume
Hallo und guten Tag zusammen,
ich habe einen Countdown auf Recursion zu Testzwecken erstellt und dieser läuft nicht bei Windows, also bricht bei 931ab Input Wert 3000.
Code: Alles auswählen
import sys
Eingabe = int(input("Bitte geben Sie eine Zahl ein "))
sys.setrecursionlimit(5000)
def countdown(x):
if x==0:
return x
else:
print(x)
return countdown(x-1)
print(countdown(Eingabe))
Das Recursionslimit von 5000 wird also nicht erreicht, warum bricht er dann ab?
Bin bei Sololearn registriert und da läuft es einwandfrei herunter.
Re: Countdown bricht ab(Testzwecke)
Verfasst: Mittwoch 24. August 2022, 17:26
von __deets__
Unter Linux geht's problemlos. Ich vermute mal das hier die Grenze des vom System vorgesehenen Stacks erreicht wird. Das kann man ggf. mit den hier
https://docs.microsoft.com/en-us/window ... stack-size angegebenen Mitteln aendern.
Re: Countdown bricht ab(Testzwecke)
Verfasst: Mittwoch 24. August 2022, 17:40
von __blackjack__
@hume: Mit welcher Meldung bricht das denn ab? Am besten in einer Konsole gestartet, damit nicht irgendeine IDE eventuell die ausgaben verfälscht oder verschluckt.
Und das ist ein Grund warum man keine Rekursion als Ersatz für simple Schleifen verwenden sollte. Es gibt Programmiersprachen die haben „tail call optimization“ oder Mechanismen um so einen „tail call“ explizit zu machen, da kann man Rekursion auch für so etwas verwenden.
Re: Countdown bricht ab(Testzwecke)
Verfasst: Mittwoch 24. August 2022, 21:42
von Dennis89
Hallo,
__blackjack__ hat geschrieben: Mittwoch 24. August 2022, 17:40
@hume: Mit welcher Meldung bricht das denn ab? Am besten in einer Konsole gestartet
Auf Windows 10 die Konsole (cmd.exe) gestartet und bei einer Eingabe von 3000 hört die Ausgabe des Programms bei 874 auf ohne Fehlermeldung.
Das selbe nur unter PyCharm endet bei 538 mit der Meldung:
Code: Alles auswählen
Process finished with exit code -1073741571 (0xC00000FD)
Wenn man danach im Netz sucht, dann bestätigt sich die Antwort von @__deets__.
Zum Beispiel hier:
https://stackoverflow.com/questions/625 ... -in-python
Grüße
Dennis
Re: Countdown bricht ab(Testzwecke)
Verfasst: Mittwoch 24. August 2022, 21:58
von August1328
Hab das kurz bei mir mal laufen lassen. Auf nem Win10 PC, i7 Prozessor, 16 Kerne, 16 GB RAM, Python 3.8 (ggf relevant, mein Ergebnis sieht leicht anders aus).
Wenn ich 3000 eingebe, zählt es bis 11 runter und hört einfach auf. Es gibt keine Fehlermeldung, auch nicht in VS Code.
Bei mir zählt es also etwas weiter, warum auch immer. Habe gerade versucht mich in sys errors und warnings einzulesen, aber das ist für heute Abend zu viel.
Also ein vom Prozessor und/oder Speicher abhängiges Problem?
Gruß
Andy
Re: Countdown bricht ab(Testzwecke)
Verfasst: Mittwoch 24. August 2022, 22:09
von Dennis89
Dann ergänze ich meine Angaben auch nocht:
-Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz 2.59 GHz
-8,00 GB (7,84 GB verwendbar)
Grüße
Dennis
Re: Countdown bricht ab(Testzwecke)
Verfasst: Donnerstag 25. August 2022, 08:12
von __blackjack__
Ich hatte unter Linux früher mal mit `sys.setrecursionlimit()` herumgespielt und auch dort Speicherzugriffsverletzungen wegen überlaufendem Stack hinbekommen. Das war noch unter einem 32-Bit-System — wahrscheinlich mit deutlich kleinerem Stack als das auf aktueller Hardware/Systemen üblich ist. Das Limit hoch zu setzen ist also generell keine so gute Idee.
Re: Countdown bricht ab(Testzwecke)
Verfasst: Donnerstag 25. August 2022, 14:16
von August1328
Ich habe in der Mittagspause den von Dennis89 gefundenen Link studiert, weil mich das Thema interessiert.
Am Ende gibt es einen weiteren Link zu einem Artikel "Process finished with exit code -1073741571":
https://stackoverflow.com/questions/206 ... 1073741571
Die Frage bzw. der Artikel beschreibt eigentlich genau das Problem und die 2. Antwort liefert eine Lösung per `sys.setrecursionlimit()`, wie von __blackjack__ geschrieben, und Threadig:
Code: Alles auswählen
if __name__ == '__main__':
sys.setrecursionlimit(100000)
threading.stack_size(200000000)
thread = threading.Thread(target=your_code)
thread.start()
Getestet habe ichs´nicht, sitze nun über meinem eigenen Python Projekt & Problemchen

Re: Countdown bricht ab(Testzwecke)
Verfasst: Montag 5. September 2022, 13:16
von hume
__blackjack__ hat geschrieben: Mittwoch 24. August 2022, 17:40
@hume: Mit welcher Meldung bricht das denn ab? Am besten in einer Konsole gestartet, damit nicht irgendeine IDE eventuell die ausgaben verfälscht oder verschluckt.
Und das ist ein Grund warum man keine Rekursion als Ersatz für simple Schleifen verwenden sollte. Es gibt Programmiersprachen die haben „tail call optimization“ oder Mechanismen um so einen „tail call“ explizit zu machen, da kann man Rekursion auch für so etwas verwenden.
Hallo, also es bricht mit keiner Fehlermeldung ab, hört einfach auf zu zählen.
Mit freundlichen Grüßen
hume
Re: Countdown bricht ab(Testzwecke)
Verfasst: Montag 5. September 2022, 13:20
von hume
Ok, also ich werde mir das ganze mal ansehen und dann mich nochmal melden.
Mit freundlichen Grüßen
hume