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 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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'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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
Merci d'avance à toute personne qui pourra m'éclairer sur ce sujet !
Bonne journée,
Sébastien
Partager