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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Problema con return/ricorsione

D
Dave (1010 points)
14 26 33
in Es2 by (1.0k points)
closed by
Buonasera a tutti.Avrei un problema con il return di una funzione ricorsiva.A tale funzione viene inizialmente passata una stringa vuota che viene manipolata attraverso un while. dopo il while eseguo un controllo con su tale stringa. se la stringa non rispetta tale controllo parte la ricorsiva , in cui la stringa fornita e' nuovamente vuota. In caso contrario ho un return stringa. La funzione e' cosi strutturata

while......:

if...... :

    ricorsiva()

else:

    return stringa

Il mio problema e' che non viene ritornata la stringa ma NONE.Ho provato a risolvere con il debugger e la funzione lavora bene fino al return. Arrivato li , non capisco perche il debugger fa un "salto" sulla linea della chiamata della ricorsiva .Come controprova  se inserisco  print stringa prima del return , la stringa stampata e' quella desiderata.Qualcuno ha idea di che errore possa trattarsi?
462 views
closed with the note: answered

1 Answer

Best answer
andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
selected by
Che ne fai del risultato della chiamata ricorsiva?
D
Dave (1010 points)
14 26 33
by (1.0k points)
Poiché quel risultato non è  cio' che cercavo lascio semplicemente partire la ricorsiva  in quel caso. Ed effettivalente credo che il problema sia proprio questo, non riesco a gestire bene quella situazione. Ho provato ad inserire un return stringa,  subito dopo la chiamata, e questa volta invece di none , viene ritornata la stringa che non rispettava il controllo, dunque il risultato della chiamata ricorsiva.
andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
se non esegui return implicitamente tornerai None
quindi se la funzione deve sempre tornare un valore devi sempre uscire con una istruzione 'return valore'
D
Dave (1010 points)
14 26 33
by (1.0k points)
Ahhh ok capito.Grazie per la spiegazione!