Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2021-22 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 2021-22 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.

VIDEOLEZIONI DEL CORSO DI FONDAMENTI DI PROGRAMMAZIONE AA20-21

PROGRAMMING COURSE VIDEOCONFERENCES AY20-21

succede qualcosa di strano nella mia ricorsione

Light (5130 points)
25 172 229
in HW7 opzionale by (5.1k points)
sto facendo l'hw 7 e dopo una prima implementazione del codice lo printo e mi da questo risultato:

[[2, 0, 1], [...], [2, 1, 0], [...], [1, 2, 0], [...], [...], [...]]

(sto facendo una lista di liste poi passerò alla struttura vera e propria)

dubbioso ho usato rtrace e vedo che nella prima chiamata ricorsiva dell'esempio mi torna giusto: infatti come nel file pdf mi torna [2, 0, 1],  ma poi quando va nella seconda chiamata ci sta nel mio risultato [[2, 0, 1], [...]]...io nel mio programma passo in input la lista fatta dalla stringa, una lista inizialmente vuota che sarà il risultato e un dizionario(che ho letto in un post precedente aiuta); poi per chiamare la ricorsione metto in una variabile r la ricorsione passando la nuova lista che è un nodo dell'albero di gioco, il risultato e il diz, e dopo questa r appendo al risultato...cosa non va? non riesco a capire
155 views

2 Answers

andrea_25 (6070 points)
2 2 24
by (6.1k points)
Piuttosto che appendere il risultato (che appunto é una lista) e creare scomode liste innestate una dentro l'altra, potresti prendere il risultato della chiamata ricorsiva e appendere i suoi elementi al risultato.

In questo modo ricavi soltanto una lista che contiene come elementi le stringhe
Light (5130 points)
25 172 229
by (5.1k points)
aspetta non ho ben capito la parte "potresti prendere il risultato della chiamata ricorsiva e appendere i suoi elementi al risultato"
andrea_25 (6070 points)
2 2 24
by (6.1k points)
siccome metti le stringhe trovate in una lista, anche il risultato di una chiamata ricorsiva viene appeso ad una lista risultato perché si parla della stessa funzione richiamata no?
Light (5130 points)
25 172 229
by (5.1k points)
sisi esatto,sono lo stesso risultato
G
Giordano_Dionisi (3100 points)
12 38 58
by (3.1k points)
Guarda mi accadeva anche a me... Praticamente non sono riuscito a capire benissimo che succede, ma intuisco che, ricorsivamente, alla fine appende il risultato ad i singoli elementi della lista e quindi ti crea una lista di liste... Morale della favola a me accadeva questo e ho provato a risolvere, ma alla fine ho abbandonato quella struttura lì considera, il gioco non vale proprio minimamente la pena... Ti consiglio di provare da subito con un'insieme, perchè avendo elementi non mutabili non accade questo problema di "lista in lista"
Light (5130 points)
25 172 229
by (5.1k points)
con il debbuger ho capito cosa succede! io scorro la lista e vedo quali sono le coppie uguali, ma scorrendo ricorsivamente ho il problema che quando mi finisce il for perchè vado avanti trovo 2 coppie uguali bene prende risultato poi continuo sempre su quel nodo fino alla fine, ho il problema che io non ho nessuna condizione di uscita e mi da "nonetype" non so se mi sono spiegato....come posso risolvere? ho provato a mettere quando finisce for ritorna risultato ma giustamente si arrabbia perchè addo un'insieme ad un insieme...
G
Giordano_Dionisi (3100 points)
12 38 58
by (3.1k points)
Ehhhh lì sta la parte complicatuccia... Come ti ripeto: abbandona l'idea della lista e passa subito all'insieme, perchè se continui così arriverai alla fine della tua implementazione che, al più, passerai 14 test su 18 e poi, per passare gli ultimi 4, ti serve almeno l'insieme (più molti altri accorgimenti) e lì sono dolori perchè devi ristrutturare gran parte del programma !!

Se invece già ritorni un insieme, allora considera che io non ritorno nulla, ho risolto questo problema passando l'insieme come parametro della funzione, se lo ritornavo era perennemente un casino (i return li ho inseriti solo per uscire dalla ricorsione ogni volta)