汉诺塔问题是法国数学家Edouard Lucas于1880年提出的。它已经成为计算机科学家的热门话题,因为该问题的解决方案极好的展示了递归的简洁性。该问题包含三个珠子和一些带有中孔的圆盘,这些圆盘可以在柱子间移动,每个圆盘具有不同的直径。刚开始时,所有圆盘按照尺寸对方在一个柱子上,即最大的圆盘放置在底部,我们可以使用另外一个柱子作为放置圆盘的临时位置,但是必须遵循以下3条规则:1一次只能移动一个圆盘 2不能将大圆盘放置在小圆盘的顶部 3除正在柱子间移动的圆盘外,其他所有圆盘都必须放置在某个柱子上。
package com.chingcloud.test01;
public class TowersOfHanoi {
private int totalDisks ;
public TowersOfHanoi(int disks){
totalDisks = disks ;
}
public void solve(){
moveTower(totalDisks,1,3,2) ;
}
private void moveTower(int numDisks,int start,int end,int temp){
if(numDisks == 1){
moveOneDisk(start,end) ;
}else{
moveTower(numDisks-1,start,temp,end) ;
moveOneDisk(start,end) ;
moveTower(numDisks-1,temp,end,start) ;
}
}
private void moveOneDisk(int start,int end){
System.out.println("Move one disk from " + start + " to " + end);
}
public static void main(String[] args) {
TowersOfHanoi t = new TowersOfHanoi(4) ;
t.solve() ;
}
}