next up previous contents index
suivant: Les permutations monter: Les programmes récursifs précédent: Les cercles   Table des matières   Index

Les tours de Hanoï

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 : 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;
}

next up previous contents index
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