Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之漢諾塔
概述
從今天開始, 小白我將帶大家開啟 Java 數(shù)據(jù)結(jié)構(gòu) & 算法的新篇章.
漢諾塔
漢諾塔 (Tower of Hanoi) 是一個(gè)源于印度的古老益智玩具. 漢諾塔由三根柱子和若干大小不同的圓盤組成. 目標(biāo)是把圓盤從最左邊的柱子移到最右邊的柱子上. 如圖:
遞歸
遞歸 (Recursion) 指的是在函數(shù)中調(diào)用自身. 遞歸可以幫助我們簡(jiǎn)化問題, 使用更少的代碼達(dá)成目標(biāo).
漢諾塔實(shí)現(xiàn)
public class 漢諾塔 { // 漢諾塔實(shí)現(xiàn) private static void hanoi(int num, char a, char b, char c) { String str = ""; // 判斷是否為最后 if(num==1) { str = "盤1從: " + a + "->" + c; System.out.println(str); } else { // 2^(n-1)次, 把除第n個(gè)盤從A移動(dòng)到B hanoi(num - 1, a, c, b); str = "盤" + num + "從: " + a + "->" + c; System.out.println(str); // 2^(n-1)次, 把除第n個(gè)盤從B移動(dòng)到C hanoi(num - 1, b, a, c); } } // main public static void main(String[] args) { hanoi(3, 'A', 'B', 'C'); } }
輸出結(jié)果:
盤1從: A->C
盤2從: A->B
盤1從: C->B
盤3從: A->C
盤1從: B->A
盤2從: B->C
盤1從: A->C
到此這篇關(guān)于Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之漢諾塔的文章就介紹到這了,更多相關(guān)Java 漢諾塔內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java 中 request.getSession(true、false、null)的區(qū)別
這篇文章主要介紹了java 中 request.getSession(true/false/null)的區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-02-02springboot整合ehcache和redis實(shí)現(xiàn)多級(jí)緩存實(shí)戰(zhàn)案例
這篇文章主要介紹了springboot整合ehcache和redis實(shí)現(xiàn)多級(jí)緩存實(shí)戰(zhàn)案例,從源碼角度分析下多級(jí)緩存實(shí)現(xiàn)原理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08Spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用
這篇文章主要介紹了spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Java concurrency之共享鎖和ReentrantReadWriteLock_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
本篇文章主要介紹了Java concurrency之共享鎖和ReentrantReadWriteLock,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-06-06Spring MVC中基于自定義Editor的表單數(shù)據(jù)處理技巧分享
Spring MVC中基于自定義Editor的表單數(shù)據(jù)處理技巧。需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12