棧與遞歸的實(shí)現(xiàn) -- 漢諾塔

第三章第三節(jié) 棧與遞歸的實(shí)現(xiàn)
棧大家都熟悉,先進(jìn)后出,棧頂在下,棧底在上,添加元素會(huì)棧底位置增加
棧的特性決定了它在處理一些特殊情況的時(shí)候很占優(yōu)勢(shì),例如,括號(hào)匹配,這節(jié)重點(diǎn) - 遞歸

漢諾塔相信大家都很熟悉,規(guī)則很簡(jiǎn)單,目的就是將x上的三個(gè)餅插到z上,大餅不能在小餅上面,一次只能移動(dòng)一個(gè)餅。如圖:


靈魂畫(huà)師之漢諾塔

二話不說(shuō)就是一個(gè)算法

void hanoi (int n, char x, char y, char z) {
    //函數(shù)意義:將塔座x上按直徑從小到大且自上而下編號(hào)為1-n 的n個(gè)圓盤(pán)按規(guī)則搬至z,y做輔助
    if(n == 1) {
        move(x, 1, z);
    } else {
        hanoi(n-1, x, z, y);
        move(x, n, z);
        hanoi(n-1, y, x, z);
    }
}

漢諾塔的遞歸其實(shí)挺簡(jiǎn)單的,但是它就是實(shí)實(shí)在在的對(duì)于遞歸核心思想的考驗(yàn) - 如何設(shè)計(jì)遞歸?
我認(rèn)為遞歸的核心在于1、如何將問(wèn)題一層層剝開(kāi);2、剝開(kāi)到最后是一個(gè)最簡(jiǎn)單的操作。

我對(duì)于漢諾塔的遞歸思路是這樣的:

  • 漢諾塔目的是將整個(gè)塔轉(zhuǎn)移,而這個(gè)塔每少一層,就是對(duì)于問(wèn)題的一層簡(jiǎn)化,直至最終只剩下一層,這個(gè)時(shí)候,漢諾塔就成為了最簡(jiǎn)單的一次操作了。所以先定下最基本操作,把“最上的某1層”從“起點(diǎn)”挪到“目的地”。
  • 然后來(lái)看遞歸體如何設(shè)計(jì),這個(gè)就是需要了解漢諾塔的規(guī)則了,漢諾塔不能同時(shí)挪動(dòng)多個(gè),而且只能把小的放在大的上面,而我們有一個(gè)輔助塔座可以使用。這時(shí)如何一層層剝開(kāi)這個(gè)問(wèn)題的答案已經(jīng)出來(lái)了,就是我們每次轉(zhuǎn)移一層的時(shí)候,將這一層跟其上的所有層分離開(kāi),如此完成問(wèn)題的一層層剝離。so,遞歸體就是,借助另外的那個(gè)塔座作輔助,將要挪動(dòng)的那一層上面的所有層先轉(zhuǎn)移到輔助塔座,然后轉(zhuǎn)移最下層到目的塔座,然后再將輔助塔座上的那幾層轉(zhuǎn)移到目的塔座。

emmm,大致就是這樣了,希望我說(shuō)清楚了,如果沒(méi)說(shuō)清的話,溜了溜了~


歡迎大家關(guān)注我的公眾號(hào)


半畝房頂
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 計(jì)算機(jī)科學(xué)的新學(xué)生通常難以理解遞歸程序設(shè)計(jì)的概念。遞歸思想之所以困難,原因在于它非常像是循環(huán)推理(circular...
    啟明_b56f閱讀 7,672評(píng)論 0 20
  • 《程序員代碼面試指南-左程云》筆記 第一章 棧和隊(duì)列 設(shè)計(jì)一個(gè)有g(shù)etMin功能的棧 實(shí)現(xiàn)一個(gè)特殊的棧,在實(shí)現(xiàn)棧的...
    xiaogmail閱讀 18,733評(píng)論 2 19
  • 記得小時(shí)候經(jīng)常講的一個(gè)故事:從前有座山,山上有座廟,廟里有一個(gè)老和尚和一個(gè)小和尚,一天,老和尚給小和尚講了一個(gè)故事...
    IT可樂(lè)閱讀 517評(píng)論 0 3
  • 周末去鄉(xiāng)下玩,下主道入某道溝,之一村曰果樹(shù)新村。滿山遍野蘋(píng)果梨樹(shù)。路旁幾多泥跡斑斑之農(nóng)機(jī)具零落散放,人跡潦潦。 路...
    穿行啊閱讀 305評(píng)論 0 0
  • 01 一個(gè)單親母親給我們的節(jié)目組打電話,說(shuō)他的兒子28歲了,不談戀愛(ài),而且和媽媽基本不交流,兩個(gè)人生活在同一個(gè)屋檐...
    讀出新菜閱讀 1,463評(píng)論 8 15

友情鏈接更多精彩內(nèi)容