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 : 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'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-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