Wpis z mikrobloga

#python #programowanie

Jak zachodzi ta rekurencja? dlaczego po _x printuje mi od 1,do 5 (1,2,3,4,5)?? Wyjaśni ktoś proszę?

def print
stars(n):
"""Rekurencyjne wypisywanie n linii z gwiazdką."""
if n > 0:
print ( n )

printstars(n-1)
print(n)
elif n==0:
print('
_X')

print
stars(5)
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@yras8: bo po wywołaniu print_stars(n-1) masz jeszcze print(n), więc wchodzi sobie najpierw na kilka poziomów rekurencji, po czym wychodząc wali w te printy :)
  • Odpowiedz
@yras8:

1. Kod wklejaj na pastebin czy coś podobnego.
2. Jak zaznaczył @ProfesorBigos - ogarnij działanie debuggera. To jest bardzo fajne zadanie w którym poznasz jak to funkcjonuje i bardzo łatwo wyłapiesz program.
3. Dlaczego masz print( n ) zamiast print(n)?
  • Odpowiedz
@yras8: Ważna jest lokalność zmiennych. Przyjęta przez funkcję wartość (przypisana do n) jest zmieniana i pamiętana tylko w obrębie tego wywołania (pomijając inne sposoby przekazywania parametrów).
Jeśli po wywołaniu fn(2) wykona się fn(1) i funkcja wróci do miejsca wywołania to n nadal będzie tam równe 2. Czyli: f(2) -> wypisz 2, wywołanie f(1) -> wypisz 1, powrót, wypisz 2.
  • Odpowiedz