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

Do you need help?

HW7opz - Recursion not present - test_data_05

B
Babby740 (1240 points)
24 35 39
in HW7 opzionale by (1.2k points)
Il mio programma passa tutti i test ma da l'errore "Recursion not present" al test_data_05. So bene che in quel test il mio programma non è ricorsivo perchè per arrivare al giusto output non ha bisogno della ricorsione.

Essendo l'input = '2 2 1 2 3' mi basta una sola chiamata della mia funzione per arrivare all'output = {'1 2 3', '2 1 3'}.

Come posso gestire questo errore?

2 Answers

E
Edward (25950 points)
4 4 172
by (26.0k points)
Ora provo a controllare meglio, ma teoricamente con quell'input dovresti entrare in ricorsione.
B
Babby740 (1240 points)
24 35 39
by (1.2k points)
Considera che il mio programma scorre la lista creata dalla stringa tramite due for quindi mi bastano quei due for per arrivare all'output.
Il mio programma entra in ricorsione se, dopo l'eliminazione di due elementi uguali, la lunghezza della lista != lunghezza dell'insieme della lista, quindi se non sono arrivato ad una foglia.
E
Edward (25950 points)
4 4 172
by (26.0k points)

Però questo è un comportamento iterativo, non ricorsivo.

la lunghezza della lista != lunghezza dell'insieme della lista

Questo dovresti farlo richiamando la funzione.

B
Babby740 (1240 points)
24 35 39
by (1.2k points)
ok, grazie   .
E
Edward (25950 points)
4 4 172
by (26.0k points)
Per spiegarmi meglio, tu ottieni quelle due/tre sottosequenze, ma non devi restituirle in automatico. Devi andare a richiamare la funzione che hai creato, e quella notando che fanno parte del caso base (ossia che non hanno duplicati), te li restituisce dentro un insieme (oppure li aggiunge ad un insieme, dipende come strutturi il programma).
AndreaGasparini (18850 points)
7 12 120
by (18.9k points)
edited by
Con quell'input la ricorsione deve essere presente in quanto c'è almeno un doppione (il 2) e perciò la funzione almeno una volta dovrà richiamare se stessa. Significa che, prima di arrivare alla chiamata ricorsiva, probabilmente il tuo algoritmo effettua delle operazioni iterative che manipolano l'input e ritornano il valore. Questo approccio è ovviamente il problema e non è coerente con il principio della ricorsione.

1ª chiamata ricorsiva su '2 2 1 2 3' --> vengono eliminati il primo ed il secondo due e ritorna '1 2 3' dato che non ci sono altri doppioni
2ª chiamata ricorsiva su '2 2 1 2 3' --> vengono eliminati il secondo e il terzo due e ritorna '2 1 3' dato che non ci sono altri doppioni
3ª chiamata ricorsiva su '2 2 1 2 3' --> vengono eliminati il terzo e il primo due e ritorna '2 1 3' dato che non ci sono altri doppioni

Fine della ricorsione in quanto non sono più presenti altri numeri doppioni nella stringa.