[C] explication Tour Hanoï récursive

Tony -  
Char Snipeur Messages postés 10112 Statut Contributeur -
Bonjour,

il y a quelqu'un qui peut m'expliquer le principe de la tour d'hanoï ?
voici le programme , et merci !

#include<stdio.h>
#include<conio.h>

void tourhanoi(int n,char depart,char base,
char intermediaire,long unsigned int *occur);

int main()
{
int n,i;
long unsigned int occur=0;
printf("Entrez le nombre de disques : ");
scanf("%d",&n);
tourhanoi(n,'1','2','3',&occur);
printf("%ld déplacements\n",occur);
getch();
}

void tourhanoi(int n,char depart,char base,
char intermediaire,long unsigned int *occur){
if(n>0){
++*occur;printf("lalal %d",n);
tourhanoi(n-1,depart,intermediaire,base,occur);
printf("hah");printf("%c -> %c\n",depart,base);
tourhanoi(n-1,intermediaire,base,depart,occur);
}
}





4 réponses

matthoffman Messages postés 499 Statut Membre 47
 
Le but est de deplacer une pile de disque (qui vont du plus grand au plus petit) d'un endroit a un autre.

Voici une animation pour t'aider a comprendre:

https://upload.wikimedia.org/wikipedia/commons/6/60/Tower_of_Hanoi_4.gif


On deplace donc les disques au fur et a mesure pour depiler la pile initiale, afin d'empiler une autre pile ailleurs. (bien entendu, un plus grand disque ne peut pas aller sur un plus petit disque).
0
Tony
 
j'aimerai comprendre l'algo du programme que j'ai déposé .. merci Matthoffman
0
Tony
 
personne n'as une réponse ou quoi ?? :/
0
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
L'algorithme est assez compliqué.
Il est récursif. Pour le comprendre part de n=1.
puis avec n=2.
et tu intervertit à chaque fois la base et l'intermédiaire. et l'intermédiare et la base. Tu fait toujours le mouvement depart ->base, mais tu interverti les différents tas.
0