欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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ù)的不一樣,對應(yīng)不同的值。
            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é)

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

相關(guān)文章

  • Compare And Swap底層原理及代碼示例詳解

    Compare And Swap底層原理及代碼示例詳解

    這篇文章主要介紹了Compare And Swap底層原理及代碼示例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • java  基礎(chǔ)知識之IO總結(jié)

    java 基礎(chǔ)知識之IO總結(jié)

    這篇文章主要介紹了java 基礎(chǔ)知識之IO總結(jié)的相關(guān)資料,Java中的I/O分為兩種類型,一種是順序讀取,一種是隨機(jī)讀取,需要的朋友可以參考下
    2017-03-03
  • Java 中FastJson的基本使用

    Java 中FastJson的基本使用

    fastjson 是一個性能很好的 Java 語言實現(xiàn)的 JSON 解析器和生成器,來自阿里巴巴的工程師開發(fā)。下面通過本文給大家介紹Java 中FastJson的基本使用,需要的朋友參考下吧
    2017-11-11
  • Java線程阻塞工具LockSupport用法詳解

    Java線程阻塞工具LockSupport用法詳解

    Java中的LockSupport是一個用于線程同步的工具類,它提供了一種基于線程的阻塞和喚醒機(jī)制,LockSupport可以讓線程在特定條件下阻塞掛起,等待其他線程發(fā)送信號來喚醒它,本文將通過一個小案例給大家介紹一下LockSupport怎么用,讓你永遠(yuǎn)記住它
    2023-08-08
  • Java  Option用法詳解

    Java  Option用法詳解

    Optional類是Java8為了解決null值判斷問題,借鑒google guava類庫的Optional類而引入的一個同名Optional類,使用Optional類可以避免顯式的null值判斷,避免null導(dǎo)致的NPE,下面以一些典型場景為例,列出Optional API常用接口的用法,并附上相應(yīng)代碼,感興趣的朋友一起看看吧
    2024-01-01
  • 詳解Java從后臺重定向(redirect)到另一個項目的方法

    詳解Java從后臺重定向(redirect)到另一個項目的方法

    這篇文章主要介紹了詳解Java從后臺重定向(redirect)到另一個項目的方法,非常具有實用價值,需要的朋友可以參考下
    2017-04-04
  • 利用Java設(shè)置Word文本框中的文字旋轉(zhuǎn)方向的實現(xiàn)方法

    利用Java設(shè)置Word文本框中的文字旋轉(zhuǎn)方向的實現(xiàn)方法

    Word文檔中可添加文本框,并設(shè)置文本框為橫向文本排列或是縱向文本排列,或者設(shè)置文本框中的文字旋轉(zhuǎn)方向等.通過Java程序代碼,也可以實現(xiàn)以上文本框的操作.下面以Java代碼示例展示具體的實現(xiàn)步驟.另外,可參考C#及VB.NET代碼的實現(xiàn)方法,需要的朋友可以參考下
    2021-06-06
  • SpringBoot整合Redis及Redis工具類撰寫實例

    SpringBoot整合Redis及Redis工具類撰寫實例

    這篇文章主要介紹了SpringBoot整合Redis及Redis工具類撰寫實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring Boot的Controller控制層和頁面

    Spring Boot的Controller控制層和頁面

    這篇文章主要介紹了Spring Boot的Controller控制層和頁面,需要的朋友可以參考下
    2017-04-04
  • 淺談Java回收對象的標(biāo)記和對象的二次標(biāo)記過程

    淺談Java回收對象的標(biāo)記和對象的二次標(biāo)記過程

    這篇文章主要介紹了淺談Java回收對象的標(biāo)記和對象的二次標(biāo)記過程的相關(guān)內(nèi)容,小編覺得還是挺不錯的,這里給大家分享一下,需要的朋友可以參考。
    2017-10-10

最新評論