JAVA漢諾塔遞迴 之SpringCloud企業分散式微服務雲架構快速開發平臺

JIAN2發表於2021-11-25

JAVA漢諾塔遞迴
目標:將A上的圓盤移動到目標塔C上。

需要框架原始碼的朋友可以看我個人簡介聯絡我。

JAVA漢諾塔遞迴 之SpringCloud企業分散式微服務雲架構快速開發平臺

思路:

①首先將A上的n-1移動到B上,由C作為輔助;(剩下一個最大的盤子在A上)

②將A上的盤子移動到目標塔C上;(此時最大的盤子到達目標位置)

③將B上n-1個盤子依次移動到C上,由A作為輔助;(這個過程和①②一樣只不過源塔是B目標依然是C,由此可以發現漢諾塔問題是一個典型的遞迴問題)

JAVA漢諾塔遞迴 之SpringCloud企業分散式微服務雲架構快速開發平臺

 例:n = 3時移動

A->C                                首先將A上的n-1移動到B上,由C作為輔助

A->B

C->A

A->C                                最大的盤子到目標塔C

B->A                                此時最大的盤子到達C塔,只需要將B上n-1個盤

B->C                                子依次挪動到C上即可,A最為輔助

A->C

實現程式碼:

public class Homework {
    public static void main(String[] args) {
        char A = 'A',B = 'B',C = 'C';
        hanoiTower(3,A,B,C);
    }
    public static void hanoiTower(int nDisks,char A,char B,char C) {
        if (nDisks == 1) {
            //  A -> C            move(nDisks,A,C);
            return;
        }
        // nDisks > 1時        // 1.先將n - 1個盤子從A -> B ,C作為輔助        hanoiTower(nDisks - 1,A,C,B);
        // 2.此時最大的盤子在A上,C為空,n - 1都在B上        move(nDisks,A,C);
        // 3.只需將n - 1個盤子再從B -> C,A作為輔助        hanoiTower(nDisks - 1,B,A,C);
    }
    // 將編號為n的盤子,從souce -> dist    public static void move(int nDisks, char sourceTower, char distTower) {
        System.out.println("編號為"+nDisks+"的盤子從"+sourceTower+"->"+distTower);
    }
}

JAVA漢諾塔遞迴 之SpringCloud企業分散式微服務雲架構快速開發平臺


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006413/viewspace-2844034/,如需轉載,請註明出處,否則將追究法律責任。

相關文章