Java 通過遞迴求解漢諾塔問題 原始碼 經典遞迴問題講解
阿新 • • 發佈:2018-11-21
漢諾塔問題描述:有三根柱子 A、B、C ,在A從下向上按照從大到小的順序放著64個圓盤,以B為中介,把盤子全部移動到C上。移動過程中,要求任意盤子的下面要麼沒有盤子,要麼只能有比它大的盤子。
分析:為了將N個盤子從A移動到C,需要先把第N個盤子上面的N-1個盤子移動到B上,這樣才能將第N個盤子移動到C上。同理,為了將第N-1個盤子從B移動到C上,需要將N-2個盤子移動到A上,這樣才能將第N-1個盤子移動到C上。通過遞迴可以清晰地求解漢諾塔問題。其最少移動次數為
package com.wk; public class HanoiTower { public static void moveDish(int level, char from, char inter, char to) { if (level == 1) { //遞迴出口 System.out.println("從 " + from + " 移動盤子 1 號到 " + to); } else { moveDish(level - 1, from, to, inter); System.out.println("從 " + from + " 移動盤子 " + level + " 號到 " + to); moveDish(level - 1, inter, to,from ); } } public static void main(String[] args) { int nDisks = 4; //漢諾塔的階數為4 moveDish(nDisks, 'A', 'B', 'C'); } }