Sie sind etwa 99% gibt.
Denken Sie an Ihrem Basisfall und Ihren rekursive Schritt - wenn Sie 0 getroffen, was willst du tun? Wenn du dich immer noch von n
runter arbeitest, was willst du dann?
Wenn Sie die Reihenfolge umkehren, in dem Sie den Wert drucken, erhalten Sie das gewünschte Ergebnis erreichen.
def countdown(n):
if n != 0:
countdown(n-1)
print(n)
Der Grund dafür ist, dass rekursive Aufrufe auf den Aufrufstack gehen. Wenn Sie Anrufe auf den Stapel schieben, während Ihr Endfall nicht erreicht wird, fügen Sie weitere Anrufe hinzu, bis Sie Ihren Basisfall n == 0
erreichen, und Sie beginnen dann ausschließlich mit dem Drucken der Werte.
Die anderen Anrufe werden dann bis in die print-Anweisung fallen, da ihre Ausführung auf der Linie nach dem bedingten zurückgekehrt ist.
Also, der Call-Stack sieht dies so etwas wie:
countdown(5)
countdown(4)
countdown(3)
countdown(2)
countdown(1)
countdown(0)
print(0)
print(1)
print(2)
print(3)
print(4)
print(5)
Wusste nicht über diesen Dekorateur, wie toll! –