Comment transformer une recursion en une pile....?

Fermé
psywar Messages postés 1 Date d'inscription mardi 17 mai 2016 Statut Membre Dernière intervention 17 mai 2016 - 17 mai 2016 à 20:27
bonjour je suis entrain de programmer en C un petit jeu...ou je dois rencontrer la position dune épé dans une matriz...jai pu faire la fonction recurssive maintenant jai besoin de refaire la meme chose en utilisant une pile ...aidez moi svp...jái aucune idée merci.....voici la ma fonction recurssive en bas:



int caminhaLabirintoRecussivo(Labirinto *labirinto, Ponto ponto, unsigned char sol[labirinto->n][labirinto->n]){
//imprimirPonto(ponto);
if(comparaIgualdadePontos(labirinto->espada, ponto)){
sol[ponto.y][ponto.x] = 1;
return 1;
}
else{
if (((ponto.x + 1) < labirinto->n) && (sol[ponto.y][ponto.x + 1] == 0) && (labirinto->mapa[ponto.y][ponto.x + 1] == 0)){
sol[ponto.y][ponto.x] = 1;
ponto.x++;
if (caminhaLabirintoRecussivo(labirinto, ponto, sol)){
return 1;
}
else{
ponto.x--;
sol[ponto.y][ponto.x] = 0;
}
}
if (((ponto.y + 1) < labirinto->n) && (sol[ponto.y + 1][ponto.x] == 0) && (labirinto->mapa[ponto.y + 1][ponto.x] == 0)){
sol[ponto.y][ponto.x] = 1;
ponto.y++;
if (caminhaLabirintoRecussivo(labirinto, ponto, sol)){
return 1;
}
else{
ponto.y--;
sol[ponto.y][ponto.x] = 0;
}
}
if (((ponto.x - 1) >= 0) && (sol[ponto.y][ponto.x - 1] == 0) && (labirinto->mapa[ponto.y][ponto.x - 1] == 0)){
sol[ponto.y][ponto.x] = 1;
ponto.x--;
if (caminhaLabirintoRecussivo(labirinto, ponto, sol)){
return 1;
}
else{
ponto.x++;
sol[ponto.y][ponto.x] = 0;
}
}
if (((ponto.y - 1) >= 0) && (sol[ponto.y - 1][ponto.x] == 0) && (labirinto->mapa[ponto.y - 1][ponto.x] == 0)){
sol[ponto.y][ponto.x] = 1;
ponto.y--;
if (caminhaLabirintoRecussivo(labirinto, ponto, sol)){
return 1;
}
else{
ponto.y++;
sol[ponto.y][ponto.x] = 0;
}
}
return 0;
}

}