源程序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')
?????
?????????????????????????????
???????????