RecursionError (Python)
Kurz: Eine Funktion ruft sich zu oft selbst auf, ohne anzuhalten; Python bricht bei etwa 1000 Ebenen ab.
Genauer: Meldung: RecursionError: maximum recursion depth exceeded. Jeder Funktionsaufruf belegt Platz auf dem Aufrufstapel (Stack). Python begrenzt die Tiefe (Standard etwa 1000), um einen Absturz zu verhindern. Es ist das Python-Gegenstück zum StackOverflowError in Java.
Im Detail
Mögliche Ursachen
- Fehlender oder falscher Basisfall: Die Rekursion hat kein Ende.
- Der Schritt führt nicht zum Basisfall hin (zum Beispiel
nwird nicht kleiner). - Wechselseitige Rekursion zwischen zwei Funktionen.
- Sehr tiefe, aber legitime Rekursion (lange Listen, Bäume, tiefe Graphen).
- Eine Methode ruft über
__getattr__/propertyunbeabsichtigt sich selbst auf.
Beispiel
def fakultaet(n):
return n * fakultaet(n - 1) # Basisfall fehlt!
def fakultaet(n):
if n <= 1: # Basisfall
return 1
return n * fakultaet(n - 1)Lösungswege
- Basisfall prüfen: Wird er jedes Mal erreicht?
- Mit einer Schleife und eigenem Stack statt Rekursion arbeiten (iterativ).
- Endrekursion wird von Python nicht optimiert; manuell umbauen.
- Für legitime tiefe Rekursion
sys.setrecursionlimit(10000)setzen (vorsichtig, Absturzgefahr) oder auf Iteration wechseln. - Memoisierung (
functools.lru_cache) vermeidet wiederholte Aufrufe, löst aber kein Tiefenproblem. - Mit
printdie Argumente ausgeben und prüfen, wie sie sich ändern.
Siehe auch: StackOverflowError, Rekursion, Stack und Heap