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.

HM2 ES 2: ERRORE RICORSIONE NEI TEST 6/7/8

m
matteocalvani (820 points)
13 19 26
in Es2 by (820 points)
edited by

error -> RecursionError

maximum recursion depth exceeded in comparison

Questo è quanto mi viene restituito dai test 6 7 8 del 2° esercizio del 2° Homeowork.
Premetto che:

  1. mi salvo in un dizionario coppie di chiavi-valori: chiave = id del comp, valore = id del sub oppure stringa vuota se non ha sub.
  2. Successivamente mi costruisco l'array dei compiti da fare con una funzione ricorsiva che mi restituisce un array con gli id dei compiti da fare (array vuoto se il compito non ha sub).

Specifico anche che mi succede (sempre nel test della consegna) quando ci sono 200000 compiti.
A qualcuno è capitato lo stesso errore con una casistica del genere? Altrimenti sapreste darmi consigli a riguardo o magari uno spunto per un ragionamento diverso?

Grazie in anticipo

Matteo

676 views
closed

2 Answers

Best answer
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)
selected by

Buonasera

Innanzitutto ti consiglio di editare il tuo post in quanto non è permesso lo scambio di codice .  Per quanto riguarda il tuo problema questo accade perché c'è un limite di chiamate alla funzione che, se superato, genera questo errore. Puoi risolvere questo problema in due modi:

  • potresti cambiare la tua ricorsiva in blocco di codice che fa le stesse operazioni. Prova a immaginare come "simulare" tale ricorsività della tua funzione, ti garantisco che il compito può essere fatto anche senza l'ausilio di una funzione ricorsiva.
  • Altrimenti potresti alzare il "tetto" della ricorsività. Per farlo devi utilizzare il modulo sys e settare il nuovo setrecursionlimit affinché ti permetta di eseguire tali chiamate di funzione
Per la documentazione ufficiale ti rimando al link:
Buona serata
Leonardo Emili
b
bosoiu17 (860 points)
4 7 12
by (860 points)
Ci tengo a ringraziarti personalmente  per l'aiuto fornito!
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)
Ci mancherebbe ;) Fa sempre piacere poter aiutare !
m
matteocalvani (820 points)
13 19 26
by (820 points)
Ciao Leo, grazie per la risposta. Ho preferito alzare il numero massimo di ricorsività (ne sono un pò innamorato ^^).
Grazie per la dritta, buona serata anche a te
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)
Ahahahaha di nulla! Felice che tu abbia risolto :)
gianpcr (4620 points)
5 16 34
by (4.6k points)

Ciao, si ho avuto anche io lo stesso problema in quanto utilizzavo una funzione ricorsiva per costruire la lista di compiti. Tuttavia sono riuscito a risolvere il problema evitando di usare la ricorsione. Quando hai una funzione ricorsiva, nella maggior parte delle situazioni, puoi arrivare alla soluzione del problema anche con dei cicli annidati evitando quindi di raggiungere il "maximum recursion depth". Nel mio caso ho risolto tramite l'uso di una coda ed un paio di cicli(1 While ed 1 For).

m
matteocalvani (820 points)
13 19 26
by (820 points)
Ciao, grazie comunque per la risposta ;)