有三根相邻的柱子,标号为A,B,C,
现在把所有盘子一个一个移动到柱子B上,
并且每次移动同一根柱子上都不能出现大盘子在小盘子上方 (如下图)
![](https://img.haomeiwen.com/i15659652/4199bc19ffdfb5e6.png)
设N个盘子
1.把N-1个盘子 从 A柱借助 B柱移到C柱
2.把第N个盘子 移动到B柱
3.把N-1个盘子 从 C柱借助 A柱移到B柱
public static void main(String[] args) {
printHanoiTower(3, "A", "B", "C");
}
/**
*
* @param N 初始N个从小到大的盘子
* @param from 原始柱子 A
* @param to 目标柱子 B
* @param help 辅助柱子 C
*/
static void printHanoiTower(int N, String from, String to, String help) {
if(N == 1) {
System.out.println("move"+N+"from"+from+"to"+to);
return;
}
printHanoiTower(N-1, from, help, to);//N-1个盘子移动到辅助柱子上
System.out.println("move"+N+"from"+from+"to"+to);//第N个到达目标柱子
printHanoiTower(N-1, help, to, from);//N-1个盘子借助A从C移动到目标柱子
}
网友评论