Około 99%.
Pomyśl o swojej podstawowej sprawie i rekurencyjnym kroku - kiedy uderzysz 0, co chcesz zrobić? Gdy nadal pracujesz w dół od n
, co chcesz zrobić?
Jeśli odwrócisz kolejność drukowania wartości, osiągniesz pożądany wynik.
def countdown(n):
if n != 0:
countdown(n-1)
print(n)
Powodem tego jest to, że wywołania rekursywne idą na stosie wywołań. Gdy przekierowujesz połączenia na stos, gdy nie ma mowy o skrzynce końcowej, będziesz kontynuował dodawanie kolejnych połączeń, aż dotrzesz do podstawowego przypadku o numerze n == 0
, a następnie zaczniesz drukować wyłącznie wartości.
Pozostałe wywołania będą następnie przesyłane do instrukcji drukowania, ponieważ ich wykonanie powróciło do wiersza po warunku.
Więc wywołanie stosu wygląda mniej więcej tak:
countdown(5)
countdown(4)
countdown(3)
countdown(2)
countdown(1)
countdown(0)
print(0)
print(1)
print(2)
print(3)
print(4)
print(5)
Nie wiedziałem o tym dekoratorze, jak wspaniale! –