Ich versuche, meinen Kopf um Rekursion zu wickeln und habe eine Frage. Auf meinem Rechner gibt sys.getrecursionlimit()
1000
, was bedeutet, dass ich eine Funktion höchstens 1000 mal rekursiv aufrufen kann. Aber ich bin in der Lage den folgenden Code erfolgreich auszuführen:Systemrekursionsgrenze wird umgangen?
def sum_badly(S, start, stop):
if start == stop:
return S[start]
else:
return sum_badly(S, start, (start+stop)//2) + sum_badly(S, (start+stop)//2 + 1, stop)
MAX = 100000
S = range(MAX)
print(sum_badly(S, 0, MAX-1))
Diese fast augenblicklich beendet, und gibt mir die erwartete Antwort von 4999950000
. Wie aber kann mein Programm die Rekursionsgrenze von 1000
umgehen?
Warum denkst du, dass es mehr als 1000 rekursive Aufrufe macht? – user2357112
@ user2357112 Sehr interessante Frage! Für eine Eingabegröße, die weit über 1000 liegt, verbraucht die erste Hälfte des Anrufs nach der Rückkehr nicht 1000 Anrufe? – dotslash
Nein. Warum sollte es? – user2357112