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

Do you need help?

Notice Board

Legare funzioni ricorsive

D
Dave (1010 points)
14 26 33
in Es2 by (1.0k points)
Buonasera a tutti.

Avrei un dubbio relativo al secondo Esercizio dell'Homework 3.Per risolverlo ho pensato a 4 diverse funzioni ricorsive che quantificano il movimento verso destra,sinistra,il basso e l'alto.In pratica dando in input delle coordinate , le funzioni segnalano il passaggio per le caselle successive o precedenti alla casella delle coordinate iniziali, finche' non viene trovata una casella rossa.Il mio problema sta nel legare tali funzioni. Per esempio:

Lascio partire la funzione "verso_destra". Nel momento in cui ho un return 0 (casella rossa), vorrei lasciar paritre la funzione "verso_il_basso" da quel punto.Avevo pensato a degli if inseriti nella definzione delle funzioni, ma non essendo state ancora dichiarate tutte le altre ,cio' mi e' impossibile.So che probabilmente mi sto incartando sul nulla, ma non riesco a venirne a capo.
550 views
closed

2 Answers

Best answer
M
Matt_Ruggiero (2380 points)
16 39 45
by (2.4k points)
selected by
non ti do la soluzione diretta per ovvi motivi... ma sappi che se vuoi usare la funzione ricorsiva ne basta solo una per ottenere quello che vuoi fare ;)
D
Dave (1010 points)
14 26 33
by (1.0k points)
Quindi mi consigli di utilizzare per esempio un'unica funzione verso_destra nella quale vado ad inserire poi le altre funzioni ,oppure di utilizzare un unica funzione che quantifica tutti i movimenti ?
M
Matt_Ruggiero (2380 points)
16 39 45
by (2.4k points)
fai una funzione che fa i movimenti nell'ordine a te comodo e poi rendila ricorsiva in questo modo li farà sempre in quell'ordine. spero di essere stato chiaro
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)
Buongiorno!
Partendo dal presupposto che ovviamente non possiamo darti la soluzione vorrei darti qualche consiglio che almeno personalmente mi ha aiutato.
Se possibile eviterei le ricorsive, possono creare problemi magari non con un percorso breve ma nell'ultimo caso in cui la scacchiera è totalmente libera le chiamate di funzione sarebbero molteplici. Rischi di incappare nel recursion limit.
Ti consiglio di seguire la tua strada di fare 4 funzioni che si dividano il lavoro. Per decidere dove far andare il robottino prova a pensare ai cosiddetti sistemi hub-and-spoke. Adattando questo pensiero al nostro problema potresti diramare tutto il "traffico" da una funzione principale e poi indirizzarlo nei vari casi.
Per quanto riguarda l'evitare la ricorsiva beh non serve che io ti ricordi che esistono svariati cicli che ti aiuterebbero in questo caso.
Spero di averti aiutato,
Buona giornata
Leonardo Emili
D
Dave (1010 points)
14 26 33
by (1.0k points)
Inizialmente ho pensato ad un ciclo for ma il problema sta per nel fare scorrere le coordonate al contrario quando per esempio devo effettuare il movimento verso sinistra o verso l'alto
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)
Il ciclo for non ti viene in aiuto in questo caso, però potresti pensare a un ciclo while per iterare "indeterminatamente". Prova a pensare a questo, col ciclo for andresti in una direzione: positiva nel caso di un range positivo  altrimenti negativa nel caso di un range negativo. Perché non cambi tu gli indici in base alle condizioni della scacchiera invece di affidare questo compito al for? :)