1.分治法
分治法的設計思想是將乙個難以直接解決的大問題分解成一些規模較小的相同問題,以便各個擊破,分而治之。
一般來說,分治演算法在每一層遞迴上都有3個步驟:
(1)分解:將問題分解成一系列子問題。
(2)求解:遞迴地求解各子問題。若子問題足夠小,則直接求解。
(3)合併:將子問題的解合併成原問題的解。
2.hanoi塔
分治法的典型應用:
當只有乙個盤子時,直接從a移到c即可;
如果已知n-1個盤子的移動方案,那麼n個盤子的移動方案如下:
先把前n-1個盤子從a借助c移動到b,再把第n個盤子從a直接移到c,然後再將b處的n-1個盤子從b處借助a移動到c處。至此就完成全部盤子的移動。
void hanoi(int n,char a,char b,char c) //將n個盤子從a通過b移動到c
if(n>1)else{
move(n,a,c);//只有乙個盤子時,直接從a移動到c。遞迴出口
hanoi塔問題的遞迴實現
一 背景故事 二 問題描述 假設有x,y,z三座塔座。在塔座x上有n個直徑各不相同 依次從小到大的編號為1,2.n的圓盤。現要求將x座上的盤子移動到z上,移動要求如下 1 一次只能移動乙個盤子。2 盤子只能插在x,y,z的某個塔座上。3 任何時刻不能將較大的盤子壓在較小的盤子上。如何移動盤子呢?當只...
題目 4座塔的Hanoi
經典遞推題。解出 n 1 n 12 個盤子 4 座塔的hanoi 漢諾塔 問題最少需多少步?1到12每個答案分別佔一行 在原hanoi問題中 d i 表示 3座塔下 i 個盤子的最小步數。如果你還沒有忘記的話 d i d i 1 2 1 這個式子還是很顯然的。我們設 f i 表示 4座塔下 i 個盤...
關於對hanoi塔遞迴的理解
對遞迴的理解的要點主要在於放棄 放棄你對於理解和跟蹤遞迴全程的企圖,只理解遞迴兩層之間的交接,以及遞迴終結的條件。想象你來到某個熱帶叢林,意外發現了十層之高的漢諾塔。正當你苦苦思索如何搬動它時,林中出來乙個土著,毛遂自薦要幫你搬塔。他名叫二傻,戴著乙個草帽,草帽上有乙個2字,號稱會把一到二號盤搬到任...