原理图:
将五盘子从A移动到C可以分解成
将上面的4个盘子移动到B,再将A上的一个盘子移动到C。
接着使用递归将上面的三个盘子通过C移动到A,再移动一个盘子从B到C。
接着问题变成了将三个盘子从A移动到C,这是下一个递的过程。
源代码:
public class HanioTower {
/*
* TopN:上面的盘子数
* From:开始的底座
* Middle:中间的底座
* To:目标的底座
* */
public static void moveTower(int TopN, char From , char Middle ,char To) //移动底座
{
if(TopN == 1)
{
System.out.println("盘子1:" +From + " -> "+To); //一步到位
}
else
{
moveTower(TopN - 1, From, To, Middle);
System.out.println("盘子"+TopN+":"+From +" —> "+To); //移动那一个盘子
moveTower(TopN -1 , Middle, From, To);
}
}
}