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 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