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
Programm hört einfach auf. Shell startet sich neu.
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.
Du musst deine Funktion umschreiben so dass sie einen expliziten Stack anstatt des Call Stacks nutzt.
- noisefloor
- User
- Beiträge: 3856
- 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
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
- DeaD_EyE
- User
- Beiträge: 1020
- 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.
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