JAVA漢諾塔遞迴
目標:將A上的圓盤移動到目標塔C上。
需要框架原始碼的朋友可以看我個人簡介聯絡我。
思路:
①首先將A上的n-1移動到B上,由C作為輔助;(剩下一個最大的盤子在A上)
②將A上的盤子移動到目標塔C上;(此時最大的盤子到達目標位置)
③將B上n-1個盤子依次移動到C上,由A作為輔助;(這個過程和①②一樣只不過源塔是B目標依然是C,由此可以發現漢諾塔問題是一個典型的遞迴問題)
例: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); } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006413/viewspace-2844034/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Serverless與微服務探索(二)- SpringBoot專案部署實踐
- 阿里雲 EventBridge 事件驅動架構實踐
- Java設計模式之(八)——介面卡模式
- [原始碼解析] PyTorch 分散式(11) ----- DistributedDataParallel 之 構建Reducer和Join操作
- 幽默:Java程式設計師編寫的完美對稱加法
- 企業管理的核心是什麼?
- 免費OA系統對中小企業的重要性
- java 論壇模組設計方案
- SpringCloud微服務實戰——搭建企業級開發框架(二十二):基於MybatisPlus外掛TenantLineInnerInterceptor實現多租戶功能
- SaaS服務平臺為中小企業實現企業管理
- Java併發-不懂原理多吃虧
- Twitter如何升級Hadoop+Kafka架構實現實時處理數十億個事件?