java 代码解析汉诺塔的递归回溯问题

代码是怎么回溯的,不明白怎么移动的,为什么这么移动。

public class HanoiTower{
    public static void main(String[] args){
        Tower tower=new Tower();
        tower.move(5,'A','B','C');
    }
}
class Tower{
    //num 表示要移动的个数,a,b,c分别表示A塔,B塔,C塔
    public void move(int num,char a,char b,char c){
        //如果只有一个盘num=1
        if(num==1){
            System.out.println(a+"->"+c);
        }else{
            //如果有多个盘,可以看成两个,最下面的和上面的所有盘
            //(1)先移动上面所有的盘到b,借助c
            move(num-1,a,c,b);
            //(2)把最下面的这个盘移动到c
            System.out.println(a+"->"+c);
            //(3)再把b塔的所有盘,移动的c,借助a
            move(num-1,b,a,c);
        }
    
    }
}


在 11,16,20行打上断点,用debug模式运行,不就可以看到整个运行流程以及线程执行顺序。