漢諾塔問題
對於上面把問題抽象出來的那段描寫敘述。對於n > 1的時候,又能夠抽象(換成“總結”這個詞會沒那麽大壓力嗎?)出這3步:
(1)、將底盤n以上的環(n-1個)移動到B
(2)、將底盤n從A移動到C
(3)、將B上的環(n-1個)移動到C
當中第1步和第3步的步數是一樣的,由於環的數量一樣(n-1個),僅僅是目標的柱子不同而已。
public class TowerApp {
/**
* @param args
*/
static int nDisks=3;
public static void main(String[] args) {
// TODO Auto-generated method stub
doTowers(nDisks,‘A‘,‘B‘,‘C‘);
}
/**
* @param topN 要移動盤子的數目
* @param from 源塔座
* @param inter 中間塔座
* @param to 目標塔座
*/
public static void doTowers(int topN,char from,char inter,char to){
if(topN==1){
System.out.println("Disk1 from "+from+" to " +to);
}
else{
doTowers(topN-1,from,to,inter);
System.out.println("Disk"+topN+" from "+from+" to "+to);
doTowers(topN-1,inter,from,to);
}
}
}
漢諾塔問題