芥末菌的演算法筆記 遞迴與分治(一)漢諾塔

2021-07-24 21:22:01 字數 539 閱讀 6741

設a,b,c是3個塔座。開始時,在塔座a有一疊共n個圓盤,這些圓盤自下而上,由大到小地疊在一起。各圓盤從小到大編號為1,2,…,n,現要求將塔座a上的這一疊圓盤移到塔座c上,並仍按同樣順序疊臵。在移動圓盤時應遵守以下移動規則:

規則1:每次只能移動1個圓盤;

規則2:任何時刻都不允許將較大的圓盤壓在較小的圓盤之上;

規則3:在滿足移動規則1和2的前提下,可將圓盤移至a,b,c中任一塔座上。

思路在問題規模較大時,較難找到一般的方法,因此嘗試用遞迴技術來解決這個問題。

當n=1時,只要將編號為1的圓盤從塔座a直接移至塔座c上。

當n>1時,需要利用塔座b作為輔助塔座。此時若能設法將n-1個較小的圓盤依照移動規則從塔座a移至塔座b,然後,將剩下的最大圓盤從塔座a移至塔座c,最後,再設法將n-1個較小的圓盤依照移動規則從塔座b移至塔座c。

由此可見,n個圓盤的移動問題可分為2次n-1個圓盤的移動問題,這又可以遞迴地用上述方法來做。

時間複雜度

遞迴表示式 t(

n)=}

int main()

演算法筆記 遞迴 漢諾塔問題

演算法 當只有乙個盤子的時候,只需要從將a塔上的乙個盤子移到c塔上。當a塔上有兩個盤子是,先將a塔上的1號盤子 編號從上到下 移動到b塔上,再將a塔上的2號盤子移動的c塔上,最後將b塔上的小盤子移動到c塔上。當a塔上有3個盤子時,先將a塔上編號1至2的盤子 共2個 移動到b塔上 需借助c塔 然後將a...

漢諾塔問題遞迴與非遞迴演算法

漢諾塔問題描述如下 有 a b c 3 根針,n 個圓盤 從 1.n 從上到下,按小到大順序放在 a 處,要求每次移動乙個,並保持從小到大的疊放順序,利用 c,把 n 個盤子移動到 b 處。遞迴演算法比較容易理解 fn hanoi n hanoi move n,a b c fn hanoi move...

c 漢諾塔的遞迴演算法與解析

從左到右 a b c 柱 子在下,小盤子在上,借助b柱將所有盤子從a柱移動到c柱,期間只有乙個原則 子只能在小盤子的下面.如果有3個盤子,大中小號,越小的越在上面,從上面給盤子按順序編號 1 小 2 中 3 大 後面的原理解析引用這裡的編號.小時候玩過這個遊戲,基本上玩到第7個,第8個就很沒有耐心玩...