Spesso, quando si studia la programmazione, ci si imbatte in concetti che sembrano puramente teorici o accademici. Uno di questi è senza dubbio la ricorsione.
“A cosa serve richiamare una funzione all’interno di se stessa?”, ci si chiede.
Beh, nel video di oggi vi mostro un esempio pratico dove la ricorsione non è solo utile, ma rende la soluzione incredibilmente elegante e compatta: risolvere automaticamente un labirinto.
Il problema: un labirinto in memoria
Come rappresentiamo un labirinto nel codice? La soluzione più intuitiva, che abbiamo adottato, è una matrice bidimensionale (un array 12×12 nel nostro caso).
Usiamo caratteri semplici per definire la “mappa”:
• # per i muri (ostacoli)
• . per i corridoi liberi
• x per segnare il nostro percorso
L’obiettivo è partire dalle coordinate di ingresso e trovare, in autonomia, quelle di uscita.
L’algoritmo della Mano Destra
Per risolvere il problema senza usare intelligenza artificiale complessa, ci affidiamo a una tecnica classica: la regola della mano destra.
Immaginate di essere fisicamente nel labirinto: se appoggiate la mano destra sulla parete e iniziate a camminare senza mai staccarla, prima o poi uscirete (o tornerete all’ingresso se il labirinto è chiuso, ma non vi perderete mai).
In termini di codice, questo si traduce in una serie di controlli prioritari:
- Posso andare a destra rispetto alla mia direzione? Se sì, giro e vado.
- Altrimenti, posso andare dritto?
- Altrimenti, posso andare a sinistra?
- Se tutto è bloccato, torno indietro.
Perché la ricorsione?
Qui entra in gioco la magia del C. Invece di scrivere loop infiniti e gestire manualmente lo “stato” di ogni incrocio, creiamo una funzione mazeTraverse che:
- Riceve le coordinate attuali.
- Controlla se siamo all’uscita (caso base).
- Se non siamo all’uscita, “chiama se stessa” spostandosi nella nuova direzione valida.
È l’approccio Divide et Impera: non risolviamo l’intero labirinto in un colpo solo, ma risolviamo solo “il prossimo passo”, lasciando alle chiamate successive il compito di finire il lavoro.
Visualizzazione con Webots
Verso la fine del video ho voluto fare un passo in più. Vedere una “X” che si muove in una matrice di testo è utile, ma vedere un agente 3D è molto più appagante!
Ho utilizzato Webots, un simulatore robotico open source, per mostrare graficamente l’algoritmo in azione. Il codice che guida il robot è lo stesso che abbiamo scritto per la matrice: cambia solo il modo in cui visualizziamo il risultato.
🛠️ Black Friday su Alexa Academy
Se questi argomenti ti appassionano e vuoi passare dalla programmazione software all’elettronica pratica, ho una buona notizia.
Per tutta questa settimana è attivo il Black Friday sul mio shop.
Tutti i kit di sviluppo (incluso il kit Z80 di cui parliamo spesso) e le schede sono scontati del 10%.
🎟️ Codice sconto: black2025
📅 Valido fino a martedì 2 dicembre
👉 Vai allo Shop e scopri i kit
