IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

perdu dans l'algorithme de la tour de Hanoi


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Par défaut perdu dans l'algorithme de la tour de Hanoi
    Bonjour,

    j'ai cherché avant de poster mais n'ai pas trouvé de solution.

    Je suis en train d'essayer de comprendre l'algorithme récursif de Hanoï mais c'est un vrai casse-tête.

    Voici l'algorithme que j'utilise avec les lignes permettant de suivre les étapes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    // Data Structures with Java by John R. Hubbard
    // Copyright McGraw-Hill, 2001
    // Example 4.15 on page 83
    // The Towers of Hanoi
    public class Hanoi {
    	public static void main(String [] args)
    	{
    		runHanoi(3, 'A', 'B', 'C');
    	}
     
    	public static void runHanoi(int n, char x, char y, char z)
    	{
    		if (n == 1)
    		{
    			System.out.println("n= " + n + ", x= " + x + ", y= " + y + ", z= " + z);
    			System.out.println("De " + x + " vers " + z);
    			System.out.println();
    		} else
    		{
    			System.out.println("Avant runHanoi(n - 1, x, z, y): n= " + n + ", x= " + x + ", y= " + y + ", z= " + z);
    			runHanoi(n - 1, x, z, y);
    			System.out.println("Après runHanoi(n - 1, x, z, y): n= " + n + ", x= " + x + ", y= " + y + ", z= " + z);
    			System.out.println();
     
    			System.out.println("Avant runHanoi(1,x,y,z): n= " + n + ", x= " + x + ", y= " + y + ", z= " + z);
    			runHanoi(1, x, y, z);
    			System.out.println("Après runHanoi(1,x,y,z): n= " + n + ", x= " + x + ", y= " + y + ", z= " + z);
    			System.out.println();
     
    			System.out.println("Avant runHanoi(n - 1, y, x, z): n= " + n + ", x= " + x + ", y= " + y + ", z= " + z);
    			runHanoi(n - 1, y, x, z);
    			System.out.println("Après runHanoi(n - 1, y, x, z): n= " + n + ", x= " + x + ", y= " + y + ", z= " + z);
    			System.out.println();
    		}
    	}
    }
    Et voici ce que j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Avant runHanoi(n - 1, x, z, y): n= 3, x= A, y= B, z= C
    Avant runHanoi(n - 1, x, z, y): n= 2, x= A, y= C, z= B
    n= 1, x= A, y= B, z= C
    De A vers C
     
    Après runHanoi(n - 1, x, z, y): n= 2, x= A, y= C, z= B
     
    Avant runHanoi(1,x,y,z): n= 2, x= A, y= C, z= B
    n= 1, x= A, y= C, z= B
    De A vers B
     
    Après runHanoi(1,x,y,z): n= 2, x= A, y= C, z= B
     
    Avant runHanoi(n - 1, y, x, z): n= 2, x= A, y= C, z= B
    n= 1, x= C, y= A, z= B
    De C vers B
     
    Après runHanoi(n - 1, y, x, z): n= 2, x= A, y= C, z= B
     
    Après runHanoi(n - 1, x, z, y): n= 3, x= A, y= B, z= C
     
    Avant runHanoi(1,x,y,z): n= 3, x= A, y= B, z= C
    n= 1, x= A, y= B, z= C
    De A vers C
     
    Après runHanoi(1,x,y,z): n= 3, x= A, y= B, z= C
     
    Avant runHanoi(n - 1, y, x, z): n= 3, x= A, y= B, z= C
    Avant runHanoi(n - 1, x, z, y): n= 2, x= B, y= A, z= C
    n= 1, x= B, y= C, z= A
    De B vers A
     
    Après runHanoi(n - 1, x, z, y): n= 2, x= B, y= A, z= C
     
    Avant runHanoi(1,x,y,z): n= 2, x= B, y= A, z= C
    n= 1, x= B, y= A, z= C
    De B vers C
     
    Après runHanoi(1,x,y,z): n= 2, x= B, y= A, z= C
     
    Avant runHanoi(n - 1, y, x, z): n= 2, x= B, y= A, z= C
    n= 1, x= A, y= B, z= C
    De A vers C
     
    Après runHanoi(n - 1, y, x, z): n= 2, x= B, y= A, z= C
     
    Après runHanoi(n - 1, y, x, z): n= 3, x= A, y= B, z= C
    Je ne comprends pas trop comment n repasse de 1 à 2 ou de 1 à 3.

    J'ai beau essayer avec des dessins, je comprends le principe, mais ne pige pas l'algorithme. Si quelqu'un pouvait essayer de m'éclairer.

    Merci par avance,
    johnny3

  2. #2
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    le passage de 1 à 3 ne se fait pas. c'est juste une petite illusion ...
    n= 3
    puis tu entres dans ton récursif, tu fais bouger n ( 3, 2, 1 etc )
    puis tu sors de ton recursif donc n revient à 3 ....( valeur qu'il a ce niveau )

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Par défaut merci
    Citation Envoyé par miloux32 Voir le message
    le passage de 1 à 3 ne se fait pas. c'est juste une petite illusion ...
    n= 3
    puis tu entres dans ton récursif, tu fais bouger n ( 3, 2, 1 etc )
    puis tu sors de ton recursif donc n revient à 3 ....( valeur qu'il a ce niveau )
    D'accord, c'est déjà un peu plus clair.

    Par contre, l'algorithme n'est pas facile au début à comprendre, je rame encore avec les permutations.

Discussions similaires

  1. perdu dans l'algorithme
    Par shadow19c dans le forum Général Python
    Réponses: 3
    Dernier message: 23/02/2011, 10h59
  2. Réponses: 2
    Dernier message: 17/09/2005, 17h43
  3. Perdu dans tous ces framework, mvc, et template
    Par __fabrice dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 02/09/2005, 12h00
  4. Perdu dans le traitement de string
    Par MatMeuh dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/09/2004, 11h34
  5. Perdue dans les Response.Write...
    Par Tapioca dans le forum ASP
    Réponses: 4
    Dernier message: 11/07/2004, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo