# include"stdio.h
"void move(char x, char y) //
自定義move函式,用來將塊從起始柱子x移動到目標柱子y,這裡的x,y為形參,不代表具體哪根柱子
void hannuota(int n, char a, char b, char c) //
自定義hannuota函式,這裡的a,b,c為形參,不代表具體哪根柱子
}int main(void)/*
執行詳細步驟:當n = 3 時
n = 3 n = 2 n = 1
| |h(1, a, b, c)=>move(a, c)=> a->c //1
|h(2, a, c, b) |move(a, b) a->b //2
| |h(1, c, a, b)=>move(c, b)=> c->b //3
|h(3, a, b, c) |move(a, c) a->c //4
|| |h(1, b, c, a)=>move(b, a)=> b->a //5
|h(2, b, a, c) |move(b, c) b->c //6
| |h(1, a, b, c)=>move(a, c)=> a->c //7
|執行結果:
請輸入要移動的塊數:
3a-->c
a-->b
c-->b
a-->c
b-->a
b-->c
a-->c
*/
關於乙個函式的遞迴呼叫,使用v模型,逐項深入,逐項返回,用「棧」的思路去理解;
兩個函式的自身遞迴,使用"滿二叉樹"的模型,語句塊可以逐步分解。。
關於遞迴樹
python 漢諾塔 Python漢諾塔
import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...
漢諾塔合集之漢諾塔3
漢諾塔3 步驟分析 1.當只有乙個圓盤時,要從a到b再到c 2.同樣擴充套件經典漢諾塔問題來看,先把a柱上 n 1 個圓盤,經b移動到c 3.把最後乙個圓盤從a移動到b 4.把c柱上的 n 1 個圓盤,經b移動 移回 到a 5.把b上的最後乙個圓盤從b移到c 6.最後把a上的 n 1 個圓盤經過b移...
漢諾塔完整程式小結
漢諾塔問題 漢諾塔的演算法就3個步驟 第一,把a上的n 1個盤通過c移動到b。第二,把a上的最下面的盤移到c。第三,因為n 1個盤全在b上了,所以把b當做a重複以上步驟就好了。所以演算法看起來就簡單多了。不過,思考過程還是很痛苦的,難以理解。遞迴中會儲存資料的好處在這裡又得到體現 2014 4 2 ...