suivant: Les permutations
monter: Les programmes récursifs
précédent: Les cercles
Table des matières
Index
Une tour de Hanoï est composée de p disques de rayons différents que
l'on numérote de 1 à p selon l'ordre croissant des rayons (le plus petit
disque a le numéro 1 et le plus gros le numéro p).
On dispose de 3 plots numérotés de 1 à 3.
Au départ les disques sont empilés selon l'ordre croissant sur le plot 1.
Le jeu consiste à reconstituer la tour sur le plot 2, en se servant du plot 3
comme plot intermédiaire, en déplacant les disques un à un, et en posant
toujours un disque sur un disque plus petit que lui.
Par exemple, on peut mettre le dique 2 sur le disque 5, mais pas sur le disque
1.
On veut écrire un programme qui imprime ce qu'il faut faire comme
manipulations : ce sera tour(a,b,c,p), où p représente le
nombre de disques, où a représente le plot
de départ, où b représente le plot d'arrivée, et où c
représente le plot intermédiaire.
On tapera alors par exemple :
tour(1,2,3,4)
si on a une tour de 4 disques sur le plot 1, et qu'on veut la reconstituer
sur le plot 2 par l'intermédiaire du plot 3.
Les manipulations à faire sont récursives, en voici les étapes :
- iL faut arriver à dégager le disque p pour qu'il soit seul sur le
plot 1 avec les p - 1 disques sur le plot 3, le plot 2 étant vide et prêt
à recevoir le dique p. Dans cette situation, il y une tour de p - 1
disques sur le plot 3. Cela veut dire que l'on est arrivé à reconstituer
la tour constituée des p - 1 premiers disques sur le plot 3, en se servant du
plot 2 comme plot intermédiaire.
Avec les notations ci dessus c'est que l'on a effectué :
tour(a,c,b,p-1)
c'est l'instruction qui permet de reconstituer une tour de p - 1 disques sur
le plot 3 en partant du plot 1 et en se servant du plot 2 comme plot
intermédiaire.
- on déplace ensuite le disque p du plot 1 sur le plot 2 :
print("deplacer le disque ",p," de ", a , " vers", b).
- il reste à reconstituer la tour de p - 1 disques sur le plot 2
en partant du plot 3 et en se servant du plot 1 comme plot intermédiaire.
Il faut donc effectuer :
tour(c,b,a,p-1)
- il reste à trouver le test d'arrêt qui est simplement (p==0)
c'est à dire : quand on a une tour de zéro disque on ne fait rien
(on renvoie 0).
On tape dans un niveau éditeur de programmes (que l'on ouvre avec
Alt+p), puis on le teste et on le valide avec OK :
//tour(1,2,3,4) (tour de hanoi)
//depacement des p disques de a vers b en passant par c
tour(a,b,c,p) :={
if (p==0) return 0;
tour(a,c,b,p-1);
print("deplacer le disque ",p," de ", a , " vers", b);
tour(c,b,a,p-1);
return 0;
}
suivant: Les permutations
monter: Les programmes récursifs
précédent: Les cercles
Table des matières
Index
Documentation de giac écrite par Renée De Graeve