Tour de Hanoi, la Récursivité de l'Algorithme
Je vais avoir un problème de compréhension de ce Tour de Hanoi, la récursivité de l'algorithme:
public class MainClass {
public static void main(String[] args) {
int nDisks = 3;
doTowers(nDisks, 'A', 'B', 'C');
}
public static void doTowers(int topN, char from, char inter, char to) {
if (topN == 1){
System.out.println("Disk 1 from " + from + " to " + to);
}else {
doTowers(topN - 1, from, to, inter);
System.out.println("Disk " + topN + " from " + from + " to " + to);
doTowers(topN - 1, inter, from, to);
}
}
}
La sortie est:
Disk 1 from A to C
Disk 2 from A to B
Disk 1 from C to B
Disk 3 from A to C
Disk 1 from B to A
Disk 2 from B to C
Disk 1 from A to C
Je ne comprends pas comment on obtient:
Disk 1 from C to B
Disk 3 from A to C
Disk 1 from B to A
Quelqu'un peut expliquer?
Merci.
le concept clé ici est de comprendre les appels récursifs de changer les arguments...
Oui, mais je ne comprends comment le Disque 1 de A à C du Disque 2 de A à B est venu, mais de toute façon je ne suis pas en mesure de comprendre d'où venait le Disque 1 de C à B venir. Pouvez-vous svp m'expliquer le flux? Je voudrais vraiment l'apprécier!
Changement
Cochez cette visualisation cs.cmu.edu/~cburch/survey/recurse/hanoiex.html
Voici une autre visualisation: jsfiddle.net/9ATNk/1
Oui, mais je ne comprends comment le Disque 1 de A à C du Disque 2 de A à B est venu, mais de toute façon je ne suis pas en mesure de comprendre d'où venait le Disque 1 de C à B venir. Pouvez-vous svp m'expliquer le flux? Je voudrais vraiment l'apprécier!
Changement
doTowers(nDisks, 'A', 'B', 'C');
à doTowers(nDisks, 'Left', 'Right', 'Middle');
et voir si cela aide à visualiser.Cochez cette visualisation cs.cmu.edu/~cburch/survey/recurse/hanoiex.html
Voici une autre visualisation: jsfiddle.net/9ATNk/1
OriginalL'auteur user564927 | 2012-09-18
Vous devez vous connecter pour publier un commentaire.
Déplacer N disques de la tour de peg A à C) est obtenue par le déplacement d'un N-1 (tous les disques sauf le dernier) tour de A à B, puis en déplaçant la Énième disque de A à C, et enfin le déplacement de la tour déjà déplacé à B, de B à C. Cela doit être appliqué à tout moment un tour avec plus d'un disque est déplacé, dans le cas d'un disque 1 tour, il suffit de déplacer son seul disque.
OriginalL'auteur Legna
Si je ne me trompe pas, vous pouvez déplacer le disque 1 d'une cheville à chaque tour correct? Si vous déplacez le premier disque de a à b puis de b à c. C'est 2 coups. Ensuite, nous pouvons maintenant aller de 2 disques de a vers b. Maintenant, nous pouvons passer le disque 1 de c retour à b. Maintenant le disque 3 est sur Un disque et de 2 et 1 sont sur un. Nous passons maintenant le disque 1 de a à b puis c". Non, nous avons besoin d'obtenir le disque 1 et 2 sur le disque 3 dans le bon ordre. Nous avons donc effacer le disque 1 de B à A. Cela nous permet de mettre le disque 2 de B à C. Maintenant, nous avons fini par déplacer le disque 1 de a à b puis c et nous avons fini.
Ne fait que répondre à votre question?
OriginalL'auteur ajon