Le programme qui résout le problème des Tours de Hanoï, jusqu'au rang 10, avec appels récursifs! 8)
Les Tours de Hanoï
Trois aiguilles A,B,C sont disposées côte-à-côte, avec n disques, de rayon croissant, empilés du plus large au plus étroit, autour de la A. Le but étant de tous les faire passer à la C, en un minimum de coups, et ce en en soulevant un à la fois et en ne posant un disque que sur un plus grand ou une tour vide.
La légende
Dans la ville de Hanoï, capitale du Viêt Nam, il existe trois aiguilles de diamant, plantées dans une dalle d'airain, et sur l'une d'elles 64 disques d'or enfilées par Dieu à la création du monde.
Les moines se succèdent pour terminer le jeu, et lorsque cela sera fait, ce sera LA FIN DU MONDE!!!
(avec un disque déplacé par seconde, il faudrait 2^64-1 déplacements et donc 584 milliards d'années pour finir le jeu...)
L'algorithme
Pour résoudre ce problème, j'utilise un algorithme récursif! Je sais, vous allez vous dire que je suis un ouf de faire ça en Basic avec 10 niveaux de sous-programmes maximum...
Mais pour ce jeu, ça marche:
Pour déplacer n disques de A vers C:
- En supposant qu'on sait déplacer n-1 disques, on déplace les n-1 premiers de A vers B (en passant par C).
- Puis on déplace le n-ième vers C.
Pour cela je plonge successivement dans les sous-programmes, c'est-à-dire les appels récursifs, en mémorisant les variables de chaque niveau.
En fait on a programmé ça en OCaml en option info (je suis en prépa MPSI), où la récursivité est bien mieux gérée (forcément c'est fait pour!).
Attention le programme crée jusqu'à 10 listes!
Le programme marche jusqu'à n=9 (ce qui fait déjà 511 instructions), pour n=10 initialisez vos variables en mode RUN, regardez le code de HANOI, puis lancez le programme auxiliaire HANOIAUX.
Amusez-vous bien!
(Voilà c'était plus un défi qu'autre chose de faire de la récursivité en Basic en fait...)
Sur le même principe, j'avais fais un programme pour résoudre les Sudoku
Alex_1186 a écrit : En fait on a programmé ça en OCaml en option info (je suis en prépa MPSI), où la récursivité est bien mieux gérée (forcément c'est fait pour!).
Ouais avec des variables locales, c'est plus facile. A partir de cette année, les MPSI info ne travailleront plus en Caml mais en Python.
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd