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

Do you need help?

Notice Board

Funzione esiti() indirettamente ricorsiva. Che fare?

daniele.gargano (1200 points)
3 7 16
in Es2 by (1.2k points)
closed by

Per come ho strutturato l'esercizio 2, durante la generazione dell'albero di gioco memorizzo gli esiti di ogni nodo e chiaramente tale operazione viene fatta in modo ricorsivo (non li memorizzo solo per usarli nella funzione esiti()). Ovviamente in un programma così strutturato non avrebbe senso ricalcolare gli esiti quando viene invocata la funzione esiti(): basta estrarli dal nodo richiesto. Il problema è che così facendo il grader considera (giustamente) non ricorsiva la funzione esiti in quanto questi ultimi vengono generati ricorsivamente, ma da un'altra funzione durante la generazione dell'albero.

Mi stavo dunque chiedendo quale fosse la cosa più giusta da fare. Potrei cambiare il programma, anche se tecnicamente credo che la soluzione che ho adottato sia da considerare ricorsiva. 

Qualcuno ha il mio stesso problema e/o può darmi dei consigli?
 

453 views
closed with the note: answered

2 Answers

1
1803699 (800 points)
2 5 16
by (800 points)
Ho lo stesso problema e non ho idea di cosa fare... Aspettiamo il professore
restante.giuseppe (2480 points)
7 32 49
by (2.5k points)
Anche se hai l’esito del nodo in una variabile devi comunque scorrere l’albero per contarli, quindi devi per forza fare una ricorsione
daniele.gargano (1200 points)
3 7 16
by (1.2k points)
edited by
Si, questo lo so. Il punto è che in ogni nodo memorizzo gli esiti (inteso come collezione dove immagazzino quante configurazioni di gioco che abbiano 'x' possono verificarsi da quel punto in poi, quante configurazioni di gioco che abbiano come risultato 'o' ecc e non il singolo risultato del nodo in questione, quello richiesto dalla funzione tipo() per capirci) per diversi motivi. Così facendo però non ha senso ricalcolarli quando viene invocata la funzione esiti(), ma è l'unico modo per non fallire il test del grader sulla ricorsione di esiti().
Il programma funziona senza problemi, l'unico test che non supera infatti è solo quello della ricorsione nella funzione esiti() (ovviamente, perché è composta da un semplice return delle entry 'x', 'o', '-' del dizionario degli esiti del nodo richiesto)
andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
Come detto altrove, controllerò a mano i programmi che non passano i test di ricorsione. Da come lo descrivi il tuo dovrebbe essere ok
1
1803699 (800 points)
2 5 16
by (800 points)
Io salvo gli esiti in un dizionario esterno che fa corrispondere ad ogni griglia il numero di esiti quando li calcolo (calcolandoli ricorsivamente per la prima volta, e prendendoli dal dizionario se capito di nuovo sulla stessa griglia). Il test di ricorsione lo passa, però presenta errori nel timeit. Va bene o devo rimodellare qualcosa?