Topic: funzioni ricorsive e variabili locali  (Letto 105 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline ortobio

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
funzioni ricorsive e variabili locali
« il: Novembre 24, 2020, 17:23 »
un saluto a tutti.

sto studiando il libro su python di lutz e mi sono imbattuto in un pezzo di codice che non riesco a capire.

come mai a fine ciclo il risultato somma correttamente tutti i valori della lista quando a inizio funzione la variabile che contiene il totale viene azzerata?

allego il codice

grazie mille


def albero(L):
    tot=0
    for x in L:
        if not isinstance(x,list):
            tot+=x
        else:
            tot+=albero(x)
    return tot
   
L=[1,[2,[3,4],5],6,[7,8]]
print(albero(L))

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.146
  • Punti reputazione: 9
    • Mostra profilo
Re:funzioni ricorsive e variabili locali
« Risposta #1 il: Novembre 24, 2020, 21:28 »
Perché "tot" non è la **stessa** variabile, che viene azzerata ogni volta. Ogni funzione, quando viene chiamata, si costruisce una *sua* variabile "tot", e alla fine ne restituisce il valore. Ma la variabile "tot" della funzione chiamante "di livello superiore", ha già una sua variabile "tot", separata, che resta lì...
qualcosa del genere:

chiamo la funzione ->
      sto eseguendo la funzione
      mi creo la mia variabile tot
      chiamo la funzione ->
          sto eseguendo la funzione
          mi creo la mia variabile tot
          (qui eventualmente chiamo ancora, ricorsivamente)
              (... ... ...)
          restituisco la mia variabile tot
      aggiungo alla mia variabile tot quella restituita dalla funzione che ho chiamato
      restituisco la mia variabile tot
e qui ho finito