Programm hört einfach auf. Shell startet sich neu.

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
Bananasplit
User
Beiträge: 10
Registriert: Sonntag 11. Februar 2018, 10:18

Ich arbeite jetzt an einen anderen Code und mir ist ein sehr interessanter Fehler aufgetreten. Es ist eine Funktion in der Recursion eine wichtig ist.
Wenn meine Zahl die Ich eingebe klein ist (Zum Beispiel 6) funktioiert es und druckt alles aus was es soll (Darunter auch eine Nachricht in der nur Joa goil digga steht) Sobald die Zahl aber größer ist (Zum Beispiel 8 ) Gibt es viel mehr Recursionen und Nach einer Zeit hört das Programm auf. Keine Fehler Meldung, einfach nur aufhören. https://ibb.co/dqV07x. Da ist der Fehler. Ich habeRecursion Limit bereits auf 99999999 gemacht Ist das vielleicht zu viel.

Ich danke bereits im Vorraus,
Bananasplit
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Der Interpreter crasht weil du das "harte" Rekursionslimit getroffen hast, das recursion limit dass du erhöht hast existiert um genau dies zu verhindern und schon vorher mit einem RuntimeError zu stoppen.

Du musst deine Funktion umschreiben so dass sie einen expliziten Stack anstatt des Call Stacks nutzt.
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

Python ist generell nicht "gut" in Recursion, weil Python so keinerlei Optimierung für Rekursion hat. Deshalb nutzt mit Rekursion auch eher selten bis gar nicht. Was Python sehr gut kann ist Iteration.

Wenn du trotzdem Rekursion nutzen willst, dann hat DasIch dir ja schon einen Lösungsansatz gegeben.

Gruß, noisefloor
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Das finde ich, ist am schwersten.

Einen Algorithmus der z.B. einfach ist und Rekursion erfordert, lässt sich auch in einen iterativen Algorithmus umwandeln (mit explizitem Stack).
Zu dem Problem kommt es, da jeder Funktionsaufruf Speicher benötigt, um für die Funktion zur Lebenszeit einen Stack zur Verfügung zu stellen.

Durch den rekursiven Algorithmus ruft sich die Funktion selbst auf, bis irgendwann die Abbruchbedigung (oder das Rekursionslimit) erreicht worden ist. Python, auch C, sind völlig ungeeignet dafür, da beide Sprachen für Funktionen einen Stack bereitstellen. Es gibt funktionale Programmiersprachen, die ausschließlich mit Rekursion arbeiten und keine Kontrollstrukturen wie if, oder Schleifen kennen.

Der Artikel beschreibt wie man rekursive Algorithmen in iterative umwandeln kann. Aber nicht erschrecken, es ist etwas komplex.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten