Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

salvare valore di una variabile in una funzione ricorsiva

S
Simone99_ (1180 points)
22 50 60
in Programmare in Python by (1.2k points)
recategorized by
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
770 views
closed

3 Answers

Best answer
Romitoskj (8920 points)
5 8 40
by (8.9k points)
selected by
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)
22 50 60
by (1.2k points)
ciao,

ci avevo pensato anche io, ma nei casi come negli hw come - se ho ben capito- è vietato aggiungere parametri?
Romitoskj (8920 points)
5 8 40
by (8.9k 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)
22 50 60
by (1.2k points)
vero, sto implementando così e sembra avere senso ora  , grazie mille per l'intuizione !
Romitoskj (8920 points)
5 8 40
by (8.9k points)
Non c'è di che!
giordano_sannino (13650 points)
7 16 81
by (13.7k points)
Creala prima! Potresti fare qualche controllo ma la cosa più semplice è dichiarla prima magari passarla!
twgever (17470 points)
8 29 105
by (17.5k 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)
22 50 60
by (1.2k 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 (17470 points)
8 29 105
by (17.5k 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.