最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaSE遞歸求解漢諾塔問題的思路與方法

 更新時間:2022年08月03日 11:26:46   作者:渡上舟(每天都要堅持學習鴨)  
遞歸是一種非常重要的算法思想,無論你是前端開發(fā),還是后端開發(fā),都需要掌握它,下面這篇文章主要給給大家介紹了關于JavaSE遞歸求解漢諾塔問題的思路與方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

1. 漢諾塔的介紹和玩法

漢諾塔(Tower of Hanoi),又稱河內(nèi)塔,是一個源于印度古老傳說的益智玩具。

一共有3根柱子(A、B、C),A柱子由下到上放著由大到小的盤子,我們需要將A柱子上的盤子移到C柱子上,每次只能移動一個盤子,且在任意一次移動中,大盤子都必須處于小盤子下方。

2. 漢諾塔問題的思路

若A柱子上只有1個盤子,只需要移動1步:A->C

若A柱子上有2個盤子,需要移動3步:A->B,A->C,B->C

此時需要借助B柱子,才能將A柱子的盤子移到C柱子上。

那么若A柱子上有3個盤子,會怎么移動呢?

思路:此時,A為起始位置,B為中轉(zhuǎn)位置,C為最終位置。我們需要將A柱子最上面的兩個盤子先想辦法移到中轉(zhuǎn)位置B柱子上,然后將A柱子最下面的那個盤子移動到C柱子上,最后再將B柱子上面的盤子想辦法移動到C柱子上。

將A柱子最上面的兩個盤子想辦法移到B柱子上:那對于這兩個盤子來說,A是起始位置,B是最終位置,C是中轉(zhuǎn)位置,需要借助C將A上的兩個盤子移動到B上。具體移法:要先將A柱子最上面的一個盤子移動到中轉(zhuǎn)位置C上,然后將A柱子上下面那個盤子移到最終位置B柱子上,最后將C柱子上的盤子移到B柱子上。

將B柱子上面的盤子想辦法移動到C柱子上:那對于B柱子上的這兩個盤子來說,B為起始位置,A為中轉(zhuǎn)位置,C為最終位置,需要借助A將B上的兩個盤子移動到C上。具體移法:要先將B柱子最上面的一個盤子移動到中轉(zhuǎn)位置A上,然后將B柱子上下面那個盤子移到最終位置C柱子上,最后將A柱子上的盤子移到C柱子上。

所以,最終三個盤子的移動路徑是  A->C,A->B,C->B,A->C,B->A,B->C,A->C,需要移動7步

網(wǎng)上找的動圖,更易于理解 

那么A柱子上有n個盤子時,該怎么移動呢?

以此類推,先將A柱子上面n-1個盤子想辦法移到B柱子上,然后將A柱子上最后一個盤子移動到C柱子上,最終再將B柱子上的n-1個盤子想辦法移到C柱子上。 想辦法:其實就是柱子上有n-1個盤子,該怎么移動這個問題。

所以漢諾塔問題用遞歸實現(xiàn)最好解決。

3. 用遞歸的代碼實現(xiàn) 

public class HanoiGame {
/*
* 第一個參數(shù)用來放給的盤子數(shù),
 *第二個參數(shù)用來放起始位置
 *第三個參數(shù)用來放中轉(zhuǎn)位置
 *第四個參數(shù)用來放最終位置
 * */
    public static void hanoi(int n,char pose1,char pose2,char pose3){ // 3 'A' 'B' 'C'
        if(n == 1){
            move(pose1,pose3);//若只有一個盤子,只需從起始位置移到最終位置這1步。
            // 這里的pose1不一定等于'A',pose3不一定等于'C';隨著遞的次數(shù)的不一樣,對應不同的值。
            return;
        }
        hanoi(n-1,pose1,pose3,pose2);//這n-1個盤子是要借助 C 移動到 B 上的。
               //所以 對于這n-1個盤子來說,起始位置是'A',中轉(zhuǎn)位置是'C',最終位置是'B'
        move(pose1,pose3);
        hanoi(n-1,pose2,pose1,pose3);
 
    }
    /*
    * 第一個參數(shù)用來放起始位置
    * 第二個參數(shù)用來放最終位置 */
    public static void move(char pose4,char pose5){
        System.out.println(pose4+" -> "+ pose5);
 
    }
    public static void main(String[] args) {
        hanoi(3,'A','B','C');
    }
}

總結(jié)

到此這篇關于JavaSE遞歸求解漢諾塔問題的思路與方法的文章就介紹到這了,更多相關JavaSE遞歸求解漢諾塔內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中的vector類使用方法示例詳解

    Java中的vector類使用方法示例詳解

    這篇文章主要介紹了Java vector類的使用詳解及實例的相關資料,需要的朋友可以參考下
    2017-04-04
  • springboot整合mongodb并實現(xiàn)crud步驟詳解

    springboot整合mongodb并實現(xiàn)crud步驟詳解

    這篇文章主要介紹了springboot整合mongodb并實現(xiàn)crud,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • JAVA Comparator 和 Comparable接口使用方法

    JAVA Comparator 和 Comparable接口使用方法

    本文介紹了Java中Comparable和Comparator接口的使用,包括它們的定義、方法和應用場景,Comparable用于定義類的自然排序規(guī)則,而Comparator提供了一種靈活的方式來定義對象之間的排序規(guī)則,無需修改類本身,感興趣的朋友一起看看吧
    2025-03-03
  • Java處理異常2種機制關鍵字區(qū)別解析

    Java處理異常2種機制關鍵字區(qū)別解析

    這篇文章主要介紹了java處理異常2種機制關鍵字區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Java創(chuàng)建多線程異步執(zhí)行實現(xiàn)代碼解析

    Java創(chuàng)建多線程異步執(zhí)行實現(xiàn)代碼解析

    這篇文章主要介紹了Java創(chuàng)建多線程異步執(zhí)行實現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Spring中的@PropertySource注解源碼詳解

    Spring中的@PropertySource注解源碼詳解

    這篇文章主要介紹了Spring中的@PropertySource注解源碼詳解,@PropertySource注解用于指定資源文件讀取的位置,它不僅能讀取properties文件,也能讀取xml文件,并且通過yaml解析器,配合自定義PropertySourceFactory實現(xiàn)解析yaml文件,需要的朋友可以參考下
    2023-11-11
  • Spring-data-JPA使用時碰到的問題以及解決方案

    Spring-data-JPA使用時碰到的問題以及解決方案

    這篇文章主要介紹了Spring-data-JPA使用時碰到的問題以及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java instanceof用法詳解及實例代碼

    Java instanceof用法詳解及實例代碼

    這篇文章主要介紹了Java instanceof用法詳解及實例代碼的相關資料,需要的朋友可以參考下
    2017-02-02
  • Java構(gòu)建高效結(jié)果緩存方法示例

    Java構(gòu)建高效結(jié)果緩存方法示例

    這篇文章主要介紹了Java構(gòu)建高效結(jié)果緩存方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Java正則驗證正整數(shù)的方法分析【測試可用】

    Java正則驗證正整數(shù)的方法分析【測試可用】

    這篇文章主要介紹了Java正則驗證正整數(shù)的方法,結(jié)合實例形式對比分析了java針對正整數(shù)的驗證方法及相關注意事項,需要的朋友可以參考下
    2017-08-08

最新評論

阳城县| 黔西县| 安宁市| 兴安盟| 临洮县| 博兴县| 无棣县| 信丰县| 弥渡县| 边坝县| 温州市| 弋阳县| 富宁县| 东海县| 昭苏县| 南川市| 尚义县| 兴城市| 南平市| 潍坊市| 随州市| 丽江市| 西林县| 赤峰市| 封丘县| 苗栗县| 宣武区| 房山区| 临安市| 安吉县| 社会| 达拉特旗| 芦溪县| 米泉市| 阿城市| 东辽县| 房产| 瑞安市| 高邑县| 灵武市| 江安县|