源程序HanoiTower.java
		
				 
				
						 
						 public
				 
				class
				 HanoiTower
				
				public
				 
				class
				 HanoiTower 
				
						 {
				
				
						{
 //
						 将n个盘从from柱移到to柱,以aux柱为辅助柱
    
						//
						 将n个盘从from柱移到to柱,以aux柱为辅助柱
						
								
								 
								 public
						 
						static
						 
						void
						 move(
						int
						 n, 
						char
						 from, 
						char
						 to, 
						char
						 aux)
						
						    
						public
						 
						static
						 
						void
						 move(
						int
						 n, 
						char
						 from, 
						char
						 to, 
						char
						 aux) 
						
								 {
						
						
								{

 if
								 (n 
								==
								 
								1
								)
        
								if
								 (n 
								==
								 
								1
								) 
								
										 {
								
								
										{
 //
										 仅有一个盘时,直接从from柱移到to柱
            
										//
										 仅有一个盘时,直接从from柱移到to柱
										
												
												 System.out.println(
										"
										将#1盘从 
										"
										 
										+
										 from 
										+
										 
										"
										 移到 
										"
										 
										+
										 to);
										
										            System.out.println(
										"
										将#1盘从 
										"
										 
										+
										 from 
										+
										 
										"
										 移到 
										"
										 
										+
										 to);

 }
								
								 
								else
        }
								
								 
								else
								 
								
										 {
								
								
										{
 //
										 将n - 1个盘从from柱移到aux柱,以to柱为辅助柱
            
										//
										 将n - 1个盘从from柱移到aux柱,以to柱为辅助柱
										
												
												 move(n 
										-
										 
										1
										, from, aux, to);
										
										            move(n 
										-
										 
										1
										, from, aux, to);
 //
										 将最下的圆盘从from柱移到to柱
            
										//
										 将最下的圆盘从from柱移到to柱
										
												
												 System.out.println(
										"
										将#
										"
										 
										+
										 n 
										+
										 
										"
										盘从 
										"
										 
										+
										 from 
										+
										 
										"
										 移到 
										"
										 
										+
										 to);
										
										            System.out.println(
										"
										将#
										"
										 
										+
										 n 
										+
										 
										"
										盘从 
										"
										 
										+
										 from 
										+
										 
										"
										 移到 
										"
										 
										+
										 to);
 //
										 将n - 1个盘从aux柱移到to柱,以from柱为辅助柱
            
										//
										 将n - 1个盘从aux柱移到to柱,以from柱为辅助柱
										
												
												 move(n 
										-
										 
										1
										, aux, to, from);
										
										            move(n 
										-
										 
										1
										, aux, to, from);
 }
        }
								
								
										
										 }
    }
						
						
								
								 
    

 public
						 
						static
						 
						void
						 main(String[] args)
    
						public
						 
						static
						 
						void
						 main(String[] args) 
						
								 {
						
						
								{
 //
								 将4个圆盘从A柱移到C柱,移动时利用B柱为辅助柱
        
								//
								 将4个圆盘从A柱移到C柱,移动时利用B柱为辅助柱
								
										
										 move(
								3
								, 
								'
								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')