Exkurs - Grenzen der rekursiven Verarbeitung bei realen Systemen

Näherung von pi nach Leibniz

Der Gelehrte Gottfried Wilhelm Leibniz entwickelte im 17 Jahrhundert eine Möglichkeit, die Kreiszahl π durch eine Reihe anzunähern. Je mehr Glieder der Reihe du berechnest und addierst, desto genauer wird das Ergebnis (das du dann noch mit 4 multiplizieren musst).

Die Leibniz-Reihe wird wie folgt berechnet:
Formelschreibweise der Leibniz-Reihe

Der erste Wert ist also 1, dann folgt -1/3, dann +1/5, usw.

Die folgenden beiden Funktionen berechnen die Leibniz-Reihe bis zur angegebenen Grenze - einmal iterativ (also mit einer while-Wiederholung) und einmal rekursiv.

def Leibniz_iterativ(Grenze):
    """ Gibt eine Näherung für pi/4 zurück """
    ergebnis=0
    for i in range(0,Grenze+1):
        ergebnis = ergebnis + (-1)**i/(2*i+1)

    return ergebnis



def Leibniz_rekursiv(Grenze):
    if Grenze>0:
        ergebnis = (-1)**Grenze/(2*Grenze+1) + Leibniz_rekursiv(Grenze-1)
    else:
        ergebnis = (-1)**Grenze/(2*Grenze+1)

    return ergebnis

Aufgabe 1

Teste, ob die beiden Funktionen das gleiche Ergebnis liefern!

Ab wann stimmt der Wert für π mindestens bis zur zweiten Stelle? Schreibe ein Programm, das den Wert für diese Grenze automatisch ermittelt.

Aufgabe 2

Vielleicht hast du schon bemerkt, dass die rekursive Lösung ab einer bestimmten Grenze nicht mehr funktioniert:
Fehlermeldung ab einer bestimmten Rekursionstiefe: RuntimeError: maximum recursion depth exceeded
Warum ist das so?

Warum begrenzt der Python-Interpreter die Rekursionstiefe?
Teste dafür den Aufruf der rekursiven Funktion einmal im Python-Tutor:

Du kannst auch einmal mit der Ausführung der iterativen Version im Python-Tutor vergleichen.

X

Fehler melden

X

Suche