codice:
public static void mazeTraversal (int rig, int col)
{
matrice[rig][col] = 'x';
print();
if (rig == 4 && col == 11)
{
return;
}
if (matrice[rig][col + 1] == '.')
mazeTraversal (rig, col + 1);
else if (matrice[rig + 1][col] == '.')
mazeTraversal (rig + 1, col);
else if (matrice[rig][col - 1] == '.')
mazeTraversal (rig, col - 1);
else if (matrice[rig - 1][col] == '.')
mazeTraversal (rig - 1, col);
}
Salve a tutti! Ho un problema: non capisco perchè un programma che ho creato funziona bene! Mi spiego meglio... Prima creo un labirinto (dichiarando una matrice e riempendola di simboli, dove il punto (.) rappresenta il corridoio e quindi dove è possibile passare, il cancelletto (#) invece rappresenta il muro e quindi non si può passare, ed infine c'è la "x" che rappresenta la posizione attuale in cui si trova il "topolino" che sta progressivamente raggiungendo l'uscita...
La casella d'uscita si trova alla posizione [4][11], quindi ad ogni chiamata del metodo ricorsivo mazeTraversal, verifico con una condizione se attualmente ci troviamo o no in quella casella. Se la condizione è vera, vuol dire che il "topolino" ha raggiunto la fine e quindi il programma deve terminare, e quindi viene eseguita l'istruzione "return"... ma mi sorge un dubbio, io con return, dovrei ritornare alla chiamata precedente di mazeTraveral giusto? Alla chiamata precedente però non eravamo di certo alla posizione [4][11], quindi in teoria si dovrebbe entrare in un loop infinito... ma invece il programma termina correttamente, come è possibile? o_O