Sujet : Re: Récursivité
De : pehache.7 (at) *nospam* gmail.com (pehache)
Groupes : fr.comp.lang.cDate : 16. Jan 2025, 15:47:38
Autres entêtes
Organisation : Nemoweb
Message-ID : <KvVb6VxI8RxjhXir2jld0j_1Zks@jntp>
References : 1 2 3 4 5 6 7 8
User-Agent : Nemo/1.0
Le 15/01/2025 à 09:27, kurtz le pirate a écrit :
On 15/01/2025 02:19, beST wrote:
Grok me dit que c'est du Povray ou un language similaire créé
spécifiquement pour un domaine particulier.
Désolé, désolé, je me suis trompé de code :(
Effectivement celui posté est du POVRAY, c'est l'environement de "destination".
Donc, voila le code C de la fonction :
——————————————————————————————————————————————————————————————————————
int solve(int board[SIZE][SIZE]) {
int row, col;
if (!find_empty(board, &row, &col)) {
return 1;
}
for (int num = 1; num <= SIZE; num++) {
if (is_valid(board, num, row, col)) {
board[row][col] = num;
if (solve(board)) {
return 1;
}
board[row][col] = 0;
} // if (is_valid(board, num, row, col))
} // for (int num = 1; num <= SIZE; num++)
return 0;
}
——————————————————————————————————————————————————————————————————————
POVRAY n'est effectivement pas du C mais est lisible facilement.
Son probl§me justement, est qu'il est limité en terme de profondeur de la récursivité sans doute à cause de sa vielle conception.
Même en C cette fonction écrite comme cela ne peut pas être efficace, et peut potentiellement saturer la pile. La raison est que board[SIZE][SIZE] est passé par valeur, ce qui génère une nouvelle copie du tableau complet à chaque appel récursif.
Faire en sorte que le paramètre soit considéré comme un pointeur va éviter ces copies inutiles. A priori le seul changement requis est:
_________________________________
int solve(int *(board)[SIZE]) {
_________________________________
Par contre je ne sais pas si povray sait manipuler des pointeurs.