Java 漢諾塔問題 詳細分析

漢諾塔

漢諾塔(Tower of Hanoi),又稱河內塔,是一個源于印度古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。?


n = 1


?n = 2


n = 3?

正常移動漢諾塔的步驟:


前面n = 1 和 n = 2 的時候 還比較簡單,我們可以直接挪動。

下面我們用遞歸的思想再移動一下:

遞歸 就是 將復雜的問題簡單化,詳細的說就是 一個復雜的大問題 可以 化解成 多個相同的小問題,而這些小問題 可以 利用遞歸的思想逐一的解決。?

提前聲明:

A : 起始位置

B : 中轉位置

C : 目標位置??

注意:此處的 起始位置 中轉位置 目標位置 并不是固定的,具體的需要看我們怎么傳參?

需要借助中轉位置 去 幫助我們實現 將最下面 一層圓盤 移動到 目標位置 上?

? ? ?

A 上 n - 1 個 圓盤 借助 C 移動到 B

解釋:?此處 將n - 1 個 圓盤 移動到??中轉位置 就需要遞歸的思想

我們 需要?把 n - 1 個圓盤 看作一個整體 直接 放到 B 上 (當然其中具體步驟還是比較麻煩的,但這些具體麻煩的步驟在遞歸中就已經實現了)

這時就體現我們遞歸的優點了,我們只需要關注 關鍵問題 其中比較繁瑣的步驟 我們可以直接忽略?(文章結尾的代碼 可以 清楚的看到)?


public static void move (char start, char end){System.out.print(start + " --> " + end + " ");
}/**** @param n 圓盤個數* @param pos1 起始位置* @param pos2 中轉位置* @param pos3 目標位置*/
public static void hanio (int n, char pos1 ,char pos2,char pos3){//結束遞過程的條件if(n == 1){move(pos1,pos3);}else {hanio(n-1,pos1,pos3,pos2); //將 n-1 個圓盤 看成一個整體 借助 pos3 位置 移動到 pos2move(pos1,pos3);  //將最大最底層的 圓盤 放到 目標位置hanio(n-1,pos2,pos1,pos3); // 再將剩下的 n - 1 個 圓盤 從 pos2 借助 pos1 移動到 pos3}}public static void main(String[] args) {hanio(1,'A','B','C');System.out.println();hanio(2,'A','B','C');System.out.println();hanio(3,'A','B','C');System.out.println();hanio(4,'A','B','C');
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38287.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38287.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38287.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vulnhub靶場ai-web 2.0

1 信息收集 1.1 主機發現 arp-scan -l 主機地址為192.168.1.4 1.2 服務端口掃描 nmap -sS -sV -A -T5 -p- 192.168.1.4 開放22,80端口 2 訪問服務 2.1 80端口訪問 http://192.168.1.4:80/ 先嘗試admin等其他常見用戶名登錄無果 然后點擊signup發現這是一個注…

prescan軟件中導入路徑文件txt/lpx

由于博主收到的是lpx格式的路徑文件,因此,第一步 1.記事本打開 ctrla 全選 ctrlc 復制 2.新建一個excel 鼠標定位到第一行第一列的格子 ctrlv 復制 3.數據欄“分列”功能 4. (0.1遞增的數列,緯度,經度,高程) 導入…

python——面向對象小練習士兵突擊與信息管理系統

士兵突擊 需求 1. 士兵 許三多 有一把 AK47 2. 士兵 可以 開火 3. 槍 能夠 發射 子彈 4. 槍 裝填 裝填子彈 —— 增加子彈數量 # 士兵突擊 # 需求 # 1. 士兵 許三多 有一把 AK47 # 2. 士兵 可以 開火 # 3. 槍 能夠 發射 子彈 # 4. 槍 裝填 裝填子彈 —— 增加子彈數量 cl…

JDBC操作流程

目錄 簡介 具體操作 1. 引入驅動包 1)下載驅動包 2)引入驅動包到項目中 2. 編寫代碼 1)創建數據源 2)建立連接 3)構造 SQL 語句 4)執行 SQL 語句 5)釋放資源 總結 簡介 JDBC 就是使…

某網頁gpt的JS逆向

原網頁網址 (base64) 在線解碼 aHR0cHM6Ly9jbGF1ZGUzLmZyZWUyZ3B0Lnh5ei8 逆向效果圖 調用代碼(復制即用) 把倒數第三行換成下面的base64解碼 aHR0cHM6Ly9jbGF1ZGUzLmZyZWUyZ3B0Lnh5ei9hcGkvZ2VuZXJhdGU import hashlib import time import reques…

C語言+ MSSQL技術開發的 PACS系統源碼:CT后處理技術之仿真內鏡CTVE

C語言 MSSQL技術開發的 PACS系統源碼:CT后處理技術之仿真內鏡CTVE 仿真內窺鏡VE VE是利用醫學影像作為原始數據,融合圖像處理、計算機圖形學、科學計算可視化、虛擬現實技術,模擬傳統光學內鏡的一種技術。 又叫做腔內重建技術,是…

試用筆記之-匯通來電顯示軟件

首先匯通來電顯示軟件下載 http://www.htsoft.com.cn/download/httelephone.rar

平衡樹專題Splay

寫在前面: 部分來自孫寶(Steven24)的博客,表示感謝。 認識 什么是Splay 就是BST的一種,整體效率是很高的,均攤的次數是O(logn)級別的。 基本操作就是把節點旋轉到BST的root,從而改善BST的平…

為適配kubelet:v0.4 安裝指定版本的docker

系統版本信息 cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 0.4 版本的kubelet 報錯信息記錄 E0603 19:00:38.273720 44142 kubelet.go:734] Error syncing pod: API error (400): {"message": "starting container with non-empty reque…

免交互簡單操作

免交互 交互:我們發出指令控制程序的運行,程序在接收到指令后按照指令的效果作出對應的反應 免交互:間接的,通過第三方的方式把指令傳給程序,不用直接下達指令 Here Document免交互 這是命令行格式,也可…

不用找了!這個軟件自帶各行業話術,客服效率飛躍

有一款客服工具軟件,不但能吸附聊天窗口,實現圖文視頻話術的一鍵發送,還內置了多行業的優質客服話術模板,允許用戶直接下載使用,快速構建起適合自身企業的專業客服知識庫。 前言 在今天的快節奏商業環境中&#xff0c…

Linux shell腳本編程

一、sehll簡介: 用戶通過shell向計算機發送指令的 計算機通過shell給用戶返回指令的執行結果 1.1、通過shell編程可以達到的效果 提高工作的效率 可以實現自動化 1.2、sehll腳本編寫的流程 1、用vi/vim創建一個.sh的文件 2、在文件中進行開發 3、個文件賦予可執行權…

CesiumJS【Basic】- #047 繪制閃爍線(Entity方式)- 需要自定義著色器

文章目錄 繪制閃爍線(Entity方式)- 需要自定義著色器1 目標2 代碼2.1 main.ts繪制閃爍線(Entity方式)- 需要自定義著色器 1 目標 使用Entity方式繪制閃爍線 2 代碼 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium<

【如何使用RSA簽名驗簽】python語言

文章目錄 簽名方法異步同步通知數據驗簽生活號響應數據驗簽同步響應數據驗簽 &#x1f308;你好呀&#xff01;我是 山頂風景獨好 &#x1f388;歡迎踏入我的博客世界&#xff0c;能與您在此邂逅&#xff0c;真是緣分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的…

作業7.2

用結構體數組以及函數完成: 錄入你要增加的幾個學生&#xff0c;之后輸出所有的學生信息 刪除你要刪除的第幾個學生&#xff0c;并打印所有的學生信息 修改你要修改的第幾個學生&#xff0c;并打印所有的學生信息 查找你要查找的第幾個學生&#xff0c;并打印該的學生信息 1 /*…

idea常用問題記錄

文章目錄 1.ant構建報錯編譯錯誤1.1 解決辦法 1.ant構建報錯編譯錯誤 Compile failed;xxx 1.1 解決辦法

Python系統教程02

鞏固 input()輸出函數 回顧 1 、 input()函數&#xff1a; 在 input()函數輸入時&#xff0c;輸入的內容一定為字符串類型。 2 、條件分支語句&#xff1a; 每一個 if 語句可以看成一個個體&#xff0c;elif 和 else 都是一個 if 個體的一部分&#xff0c;每一個 if 個體 運…

51單片機外部中斷(按鍵識別)

歡迎入群共同學習交流 時間記錄&#xff1a;2024/7/2 一、電路原理圖 51單片機包含INT0、INT1兩個外部中斷接口 二、知識點介紹 1.中斷寄存器位介紹 &#xff08;1&#xff09;TCON定時控制寄存器&#xff0c;位0&#xff08;IT0&#xff09;中斷INT0請求信號選擇位&#x…

WordPress主題開發進群付費主題v1.1.2 多種引流方式

全新前端UI界面&#xff0c;多種前端交互特效讓頁面不再單調&#xff0c;進群頁面群成員數&#xff0c;群成員頭像名稱&#xff0c;每次刷新頁面隨機更新不重復&#xff0c;最下面評論和點贊也是如此隨機刷新不重復 進群頁面簡介&#xff0c;群聊名稱&#xff0c;群內展示&…

注意!年齡越大,社交圈子越窄?其實這是老人的理性選擇!數學家告訴你:何時該跳槽,何時該堅守!你必須知道的三個智慧:讓你的人生更加精彩!

我們到底應該在什么情況下探索新事物&#xff0c;什么情況下專注于已有的東西呢&#xff1f;本質上來說&#xff0c;這個問題就是在詢問&#xff0c;你究竟應該耗費精力去探索新的信息&#xff0c;還是專注從既有的信息中獲取收獲&#xff1f; 有人采訪了臨終的老人&#xff0c…