1. 程式人生 > >Java 通過遞迴求解漢諾塔問題 原始碼 經典遞迴問題講解

Java 通過遞迴求解漢諾塔問題 原始碼 經典遞迴問題講解

漢諾塔問題描述:有三根柱子 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上。通過遞迴可以清晰地求解漢諾塔問題。其最少移動次數為2^{n}-1

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');
    }
}