2021-11-29 汉诺塔

/**

* @author Casey

* @version 1.0

*/

public class HanoiTower{

    public static void main(String[] args) {

        hanoiTower(5, 'A', 'B', 'C');

    }

    public static void hanoiTower(int num, char A, char B, char C) {

        if (num == 1) {

            System.out.println(A +"->" + C);

        } else {

            hanoiTower(num -1, A, C, B);

            System.out.println(A +"->" + C);

            hanoiTower(num -1, B, A, C);

        }

    }

}

递归的思想:

上面5个移动到C->上面4个移动到B->上面3个移动到C->上面2个移动到B->上面1个移动到C

简单理解:

目标:把所有移动到目标盘

每次递归时把Char C当做目标杆,

不要去想这个Char C到底是哪个杆,就把Char C当做目标杆来看,目的就是把现在的num个盘子移动到C(目标杆)

hanoiTower(num -1, A, C, B); 把除最底下的所有圆盘移动到除目标杆的另一个杆上

 System.out.println(A +"->" + C);把最底下的圆盘移动到目标杆

 hanoiTower(num -1, B, A, C);把第一步移动过的那一堆圆盘移动到目标杆

每次递归都要这么想,才不会绕进去

你可能感兴趣的:(2021-11-29 汉诺塔)