Problème avec pré-décrémentation
Bonjour,
Débutant en C, j'ai voulu développer un petit programme pour résoudre le problème de la tour de Hanoï.
Celui-ci génère une liste des mouvements.
Quand j'essaie ce code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include <stdio.h>
void move(int, int, int, int);
int main(void) {
move(5, 1, 3, 2);
}
void move(int n, int from, int to, int temp) {
if(n == 1) printf("%d -> %d\n", from, to);
else {
move(--n, from, temp, to);
printf("%d -> %d\n", from, to);
move(--n, temp, to, from);
}
} |
J'obtiens une erreur de segmentation. J'ai trouvé le problème qui réside dans la pré-décrémentation de n dans les appels de fonctions. La correction suivante fonctionne donc :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include <stdio.h>
void move(int, int, int, int);
int main(void) {
move(5, 1, 3, 2);
}
void move(int n, int from, int to, int temp) {
if(n == 1) printf("%d -> %d\n", from, to);
else {
move(n-1, from, temp, to);
printf("%d -> %d\n", from, to);
move(n-1, temp, to, from);
}
} |
J'avoue ne pas comprendre pourquoi l'opérateur "--" devant la variable "n" ne fonctionne pas. De ce que j'ai appris, cet opérateur unaire est tout au-dessus niveau priorité des opérateurs et placé devant la variable c'est la nouvelle valeur qui devrait être utilisée dans l'appel de fonction.
Merci d'avance à toute personne qui pourra m'éclairer sur ce sujet ! :)
Bonne journée,
Sébastien