漢諾塔程式

2022-05-29 00:57:16 字數 1069 閱讀 9416

# 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 ...