programmation Java (école d'ingénieur) · Chapitre 4 · Exercice de TD
Tours de Hanoï
Méthodes · niveau 3 (difficile)
Énoncé
Trois piquets A, B, C ; disques de tailles différentes sont empilés sur A, du plus grand en bas au plus petit en haut. Il faut les déplacer sur C, un disque à la fois, sans jamais poser un disque sur un plus petit.
- Expliquer pourquoi, pour déplacer disques de A vers C, il suffit de déplacer disques de A vers B, puis le plus grand de A vers C, puis les disques de B vers C.
- Écrire la méthode récursive
static void hanoi(int n, char depart, char arrivee, char intermediaire)qui affiche les déplacements, et l'exécuter pour . - Combien de déplacements pour disques ? Le vérifier par le programme pour .
Corrigé
- Pour poser le plus grand disque sur C, il faut que C soit vide et que ce disque soit seul sur A : les autres sont donc tous sur B. On les y amène (problème de taille , B jouant le rôle d'arrivée), on déplace le grand disque, puis on ramène les disques de B sur C (encore un problème de taille ). Le grand disque, en bas, ne gêne jamais. -
static void hanoi(int n, char depart, char arrivee, char intermediaire) {
if (n == 0) return; // rien à déplacer
hanoi(n - 1, depart, intermediaire, arrivee);
System.out.println(" disque " + n + " : " + depart + " -> " + arrivee);
hanoi(n - 1, intermediaire, arrivee, depart);
}
disque 1 : A -> C
disque 2 : A -> B
disque 1 : C -> B
disque 3 : A -> C
disque 1 : B -> A
disque 2 : B -> C
disque 1 : A -> C
- Si est le nombre de déplacements, et , d'où . Le programme compte pour . Pour disques, à un déplacement par seconde, il faudrait près de milliards d'années.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.