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.
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.
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.
@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__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:
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?
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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
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:
__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.