源程序HanoiTower.java
public
class
HanoiTower
{
//
将n个盘从from柱移到to柱,以aux柱为辅助柱
public
static
void
move(
int
n,
char
from,
char
to,
char
aux)
{
if
(n
==
1
)
{
//
仅有一个盘时,直接从from柱移到to柱
System.out.println(
"
将#1盘从
"
+
from
+
"
移到
"
+
to);
}
else
{
//
将n - 1个盘从from柱移到aux柱,以to柱为辅助柱
move(n
-
1
, from, aux, to);
//
将最下的圆盘从from柱移到to柱
System.out.println(
"
将#
"
+
n
+
"
盘从
"
+
from
+
"
移到
"
+
to);
//
将n - 1个盘从aux柱移到to柱,以from柱为辅助柱
move(n
-
1
, aux, to, from);
}
}
public
static
void
main(String[] args)
{
//
将4个圆盘从A柱移到C柱,移动时利用B柱为辅助柱
move(
3
,
'
A
'
,
'
C
'
,
'
B
'
);
}
}
原则就是要把from柱的所有盘子移到to柱上去
为此将n维问题转化为n-1维问题,利用递归,可以很好的解决此问题
运行结果
将#1盘从 A 移到 C
将#2盘从 A 移到 B
将#1盘从 C 移到 B
将#3盘从 A 移到 C
将#1盘从 B 移到 A
将#2盘从 B 移到 C
将#1盘从 A 移到 C
这里是对以上源程序中move(3, 'A', 'C', 'B')的分析
move(3, 'A', 'C', 'B')
move(2, 'A', 'B', 'C') #3 A-->C move(2, 'B', 'C', 'A')
move(1, 'A', 'C', 'B') #2 A-->B move(1, 'C', 'B', 'A') move(1 'B', 'A','C') #2 B-->C move(1,'A', 'C', 'B')