java遞歸實現(xiàn)漢諾塔步驟介紹
漢諾塔的規(guī)則是:一共三根柱子,一根柱子從上到下套著有小到大的若干個圓盤,要將所有圓盤按照這個排放順序移動到第三根柱子上,并且每次只能移動一個圓盤.
可以將整個過程分為三個步驟來看:
第一步:將除最大圓盤外的n-1個圓盤移動輔助柱子上
第二步:將最大的圓盤移動到目標柱子
第三步:將n-1個圓盤從輔助柱子移動到目標柱子
其中第一步又可以拆成一模一樣的三步,可以看成一個n-1層的塔要移動到目標柱子,只不過目標柱子換了一個:
第三步也可以拆分成一模一樣的三步:
多拆幾次就會發(fā)現(xiàn)規(guī)律:第一步和第三步無論如何拆成更小的漢諾塔,都只是目標柱和輔助柱發(fā)生調(diào)換,其他部分都是一模一樣.所以我們將第一步和第三步進行遞歸運算就可以解決漢諾塔問題.
static void hanNuo(int n,String A,String B,String C){ if (n==1){ System.out.println("把第"+n+"個從"+A+"移動到"+C); }else { hanNuo(n-1,A,C,B); System.out.println("把第"+n+"個從"+A+"移動到"+C); hanNuo(n-1,B,A,C); } }
每進入一次遞歸塔的層數(shù)減一 ,由于第一步和第三步每拆分一次目標塔和輔助塔就會互換,同理,每進入一次遞歸也會將兩個塔互換,因為第一步拆分目標塔是在塔二和塔三之間循環(huán),所以我們在進入遞歸時也將傳入代表"塔二"和"塔三"的參數(shù)互換,同理第三步也將互換代表"塔一"和"塔二"的參數(shù).
方法中的第二步由于第一步已經(jīng)遞歸完成,所以可以直接使用打印語句進行輸出.
到此這篇關于java遞歸實現(xiàn)漢諾塔步驟介紹的文章就介紹到這了,更多相關java漢諾塔內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot集成RocketMQ發(fā)送事務消息的原理解析
RocketMQ 的事務消息提供類似 X/Open XA 的分布事務功能,通過事務消息能達到分布式事務的最終一致,這篇文章主要介紹了SpringBoot集成RocketMQ發(fā)送事務消息,需要的朋友可以參考下2022-06-06Mybatis入門指南之實現(xiàn)對數(shù)據(jù)庫增刪改查
數(shù)據(jù)持久層主要負責數(shù)據(jù)的增、刪、改、查等功能,MyBatis 則是一款優(yōu)秀的持久層框架,下面這篇文章主要給大家介紹了關于Mybatis入門指南之實現(xiàn)對數(shù)據(jù)庫增刪改查的相關資料,需要的朋友可以參考下2022-10-10springboot+dubbo啟動項目時報錯 zookeeper not connect
這篇文章主要介紹了springboot+dubbo項目啟動項目時報錯 zookeeper not connected的問題,本文給大家定位問題及解決方案,結合實例代碼給大家講解的非常詳細,需要的朋友可以參考下2023-06-06mybatis中點擊mapper接口快速定位到對應xml中sql方式
這篇文章主要介紹了mybatis中點擊mapper接口快速定位到對應xml中sql方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01