Do you need any help?

succede qualcosa di strano nella mia ricorsione

Light (5130 points)
24 170 229
asked Nov 28, 2020 in HW7 opzionale by Light (5,130 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
154 views

2 Answers

andrea_25 (6070 points)
2 2 24
answered Nov 28, 2020 by andrea_25 (6,070 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)
24 170 229
commented Nov 28, 2020 by Light (5,130 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
commented Nov 28, 2020 by andrea_25 (6,070 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)
24 170 229
commented Nov 28, 2020 by Light (5,130 points)
sisi esatto,sono lo stesso risultato
G
Giordano_Dionisi (3100 points)
12 38 58
answered Nov 28, 2020 by Giordano_Dionisi (3,100 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)
24 170 229
commented Nov 28, 2020 by Light (5,130 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
commented Nov 28, 2020 by Giordano_Dionisi (3,100 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)