EMZETT.
Login

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 n wird nicht kleiner).
  • Wechselseitige Rekursion zwischen zwei Funktionen.
  • Sehr tiefe, aber legitime Rekursion (lange Listen, Bäume, tiefe Graphen).
  • Eine Methode ruft über __getattr__/property unbeabsichtigt 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

  1. Basisfall prüfen: Wird er jedes Mal erreicht?
  2. Mit einer Schleife und eigenem Stack statt Rekursion arbeiten (iterativ).
  3. Endrekursion wird von Python nicht optimiert; manuell umbauen.
  4. Für legitime tiefe Rekursion sys.setrecursionlimit(10000) setzen (vorsichtig, Absturzgefahr) oder auf Iteration wechseln.
  5. Memoisierung (functools.lru_cache) vermeidet wiederholte Aufrufe, löst aber kein Tiefenproblem.
  6. Mit print die Argumente ausgeben und prüfen, wie sie sich ändern.

Siehe auch: StackOverflowError, Rekursion, Stack und Heap