我有理解漢諾塔這種遞推算法的一個問題:漢諾塔遞歸算法
public class MainClass {
public static void main(String[] args) {
int nDisks = 3;
doTowers(nDisks, 'A', 'B', 'C');
}
public static void doTowers(int topN, char from, char inter, char to) {
if (topN == 1){
System.out.println("Disk 1 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);
}
}
}
輸出是:
Disk 1 from A to C
Disk 2 from A to B
Disk 1 from C to B
Disk 3 from A to C
Disk 1 from B to A
Disk 2 from B to C
Disk 1 from A to C
我不明白怎麼做,我們得到:
Disk 1 from C to B
Disk 3 from A to C
Disk 1 from B to A
有人能解釋一下嗎?
謝謝。
這裏的關鍵概念是理解遞歸調用改變參數... – gtgaxiola
是的,但我明白如何磁盤1從A到C磁盤2從A到B來了,但不知何故我無法理解從哪裏磁盤1從C到B來了。你能解釋我的流程嗎?我真的很感激! – user564927
將doTowers(nDisks,'A','B','C');'改爲'doTowers(nDisks,'Left','Right','Middle');'看看是否有助於可視化它。 – Shmiddty