salvare valore di una variabile in una funzione ricorsiva

S
Simone99_ (1180 points)
13 50 59
asked Oct 27, 2020 in Programmare in Python by Simone99_ (1,180 points)
recategorized Nov 5, 2020 by andrea.sterbini
buongiorno

svolgendo qualche esercizio sulle funzioni ricorsive, mi è sorto un dubbio: se all'interno della funzione lavoro con una variabile (esempio, incremento sempre una variabile somma di uno ) che però ho inizialmente dichiarato come somma=0 per inizializzarla e che prima della ricorsione sia stata incrementeta quindi abbia subito una modifica , ogni volta che richiamerò la funzione ricorsivamente perderò il valore passato(perchè teoricamente richiamando la funzione si ha nuovamente l'inizializzazione ) o sbaglio? c'è un' alternativa? grazie
285 views

3 Answers

Best answer
Romitoskj (8920 points)
4 8 40
answered Oct 27, 2020 by Romitoskj (8,920 points)
selected Oct 27, 2020 by Simone99_
Si dovresti passarla come parametro. Io la scriverei come parametro opzionale uguale a zero in modo che quando richiami per la prima volta la funzione non dovrai passarla e sarà inizializzata a 0, mentre quando la passerai durante la ricorsione avrà il valore che gli passi.
S
Simone99_ (1180 points)
13 50 59
commented Oct 27, 2020 by Simone99_ (1,180 points)
ciao,

ci avevo pensato anche io, ma nei casi come negli hw come - se ho ben capito- è vietato aggiungere parametri?
Romitoskj (8920 points)
4 8 40
commented Oct 27, 2020 by Romitoskj (8,920 points)
Nella funzione ex1 che è quella richiesta si, è vietato. Questo perché i test si basano su input precisi.

Se invece crei una nuova funzione da zero puoi farlo tranquillamente.
S
Simone99_ (1180 points)
13 50 59
commented Oct 27, 2020 by Simone99_ (1,180 points)
vero, sto implementando così e sembra avere senso ora  , grazie mille per l'intuizione !
Romitoskj (8920 points)
4 8 40
commented Oct 27, 2020 by Romitoskj (8,920 points)
Non c'è di che!
giordano_sannino (13650 points)
7 16 81
answered Oct 27, 2020 by giordano_sannino (13,650 points)
Creala prima! Potresti fare qualche controllo ma la cosa più semplice è dichiarla prima magari passarla!
twgever (15190 points)
7 27 105
answered Oct 27, 2020 by twgever (15,190 points)
perchè non inizializzarla prima della funzione? Oppure, perchè non far svolgere i calcoli dopo la chiamata della funzione?
Se proprio vuoi fare prima i calcoli però, allora forse la cosa migliore da fare sarebbe mettere un if, che controlla se somma è definito o meno, e se non lo è, inizializza. Ma non so di preciso come si faccia, né se ti convenga mettere un controllo extra in una funzione ricorsiva.
S
Simone99_ (1180 points)
13 50 59
commented Oct 27, 2020 by Simone99_ (1,180 points)
inizializzarla prima della funzione vorrebbe dire creare una variabile globale valida per tutto il codice e le altre funzioni, questo però è un vincolo che negli hw  viene vietato
twgever (15190 points)
7 27 105
commented Oct 27, 2020 by twgever (15,190 points)
insomma, se la funzione la chiami dentro alla funzione es1, non è un problema. quindi es1 e dentro ho s=0 e subito dopo la chiamata di un'altra funzione.