Hier ist der Code mit Kommentaren, der Ihnen hilft zu verstehen, wie die rekursive Funktion funktioniert.
def mysum(lower, upper, margin):
blanks = ' ' * margin # First time : margin = 0
# 2nd time : margin = 4
print blanks, lower, upper # first time : lower = 1, upper = 4
# 2nd time : lower = 2, upper = 4
if lower > upper: # first time : go to else (& 2nd time, ... until lower =5)
print blanks, 0
return 0
else:
result = lower + mysum(lower + 1, upper, margin + 4) # result is not directly calulated
# first it need to execute the call to
# the function, it will be the second call
print blanks, result, lower, margin
return result
if __name__ == "__main__":
mysum(1, 4, 0) # First call of your function
Bei niedriger bei 5 ist, gibt es keinen Aufruf mySum und es gibt 0 zurück So entspannen Sie nur einen Schritt: niedriger bei 4, und Sie, wo in der „else“ Teil. Sie haben es mit niedriger = 4 und der letzte Aufruf zurückgegeben 0. Das Ergebnis = 4.
result = lower + mysum(lower + 1, upper, margin + 4)
print blanks, result, lower, margin
return result
zu beenden und Sie einen weiteren Schritt entspannen: niedriger bei 3 ist, und der Anruf kurz vor einer 4 zurückgekehrt, so Das neue Ergebnis ist 7. Dieser Wert wird zurückgegeben.
nun niedriger = 3, tun Sie das gleiche, für niedrigere = 2, untere = 1.
Sie können sehen, dass 1 + 2 + 3 + 4 = 10. Und es ist das Ergebnis Ihrer Funktion . Ich hoffe, dass ich dir geholfen habe, sag mir, wenn du es nicht verstehst, kann ich vielleicht einen anderen Weg finden, es zu erklären ...:/
Ich dachte zuerst, dass, nachdem die Funktion den Basisfall erreicht hat, es enden würde, ich nicht bemerkte, dass es einige andere Anrufe auf dem Anruf-Stapel noch hatte – diogenes