問題描述:如何移動4層漢諾塔
方法步驟:
要移動4個環,將3個環從a,借助c,移動到b (有遞迴)
將第4個,也就是最大的環從a挪到c
將3個環從b,借助a,移動到c (有遞迴)
要移動3個環,將2個環從a,借助c,移動到b (有遞迴)
將第3個,也就是最大的環從a挪到c
將2個環從b,借助a,移動到c (有遞迴)
要移動2個環,將1個環從a,移動到b
將第2個,也就是最大的環從a挪到c
將1個環從b,移動到c
#include #define disccount 4
void move(int, char, char,char);
int main()
void move(int n, char a, char b,char c)
}
如何進行逐層呼叫的:
n a b c
4 a b c
3 a c b
2 a b c
1 a c b a->b
2 a b c a->c //回歸到第乙個呼叫函式末,小魚先游出
1 b a c b->c //滿足遞迴結束條件
3 a c b a->b //回歸到第乙個呼叫函式末
2 c a b //執行第二個遞迴函式
1 c b a c->a //滿足遞迴結束條件,執行完第乙個遞迴函式
2 c a b c->b //回歸到第乙個呼叫函式末,執行第二個遞迴函式
1 a c b a->b //滿足遞迴結束條件,執行完第二個遞迴函式
4 a b c a->c //回歸到第乙個呼叫函式末,大魚後游出
3 b a c
2 b c a
1 b a c b->c //滿足遞迴結束條件,執行完第乙個遞迴函式
2 b c a b->a //執行第二個遞迴函式,小魚先游出
1 c b a c->a //滿足遞迴結束條件,執行完第二個遞迴函式
3 b a c b->c //執行第二個遞迴函式,大魚後游出
2 a b c
1 a c b a->b //滿足遞迴結束條件,執行完第乙個遞迴函式
2 a b c a->c //執行第二個遞迴函式
1 b a c b->c //滿足遞迴結束條件,執行完第二個遞迴函式
心得:
遞迴(兩個過程)
遞推:大魚吃小魚;回歸:最小的魚先遊出來
遞迴函式裡面又有2個呼叫自身的遞迴函式裡面引數的時候,
遞迴函式裡面先把第乙個遞迴函式先執行完,然後再執行第二個遞迴函式,並且引數變化一致
n層漢諾塔總共移動多少次呢?
#include #define disccount 4
long move(int, char, char,char);
int main()
long move(int n, char a, char b,char c)
}
經典遞迴漢諾塔
演算法 當只有乙個盤子的時候,只需要從將a塔上的乙個盤子移到c塔上。當a塔上有兩個盤子是,先將a塔上的1號盤子 編號從上到下 移動到b塔上,再將a塔上的2號盤子移動的c塔上,最後將b塔上的小盤子移動到c塔上。當a塔上有3個盤子時,先將a塔上編號1至2的盤子 共2個 移動到b塔上 需借助c塔 然後將a...
經典遞迴題 漢諾塔
漢諾塔遊戲 在這個遊戲中,我們 或者是以為神話中的祭司 有n個不用大小的盤 子和3根木樁。一開始,所有的盤子都按照大小順序套在第1根木樁上,最大的盤子 在底部,最小的盤子在頂部。我們的目的是把所有的盤子都移到第3根木樁上去,在 必要的時候可以借助第2根木樁。我們每次只能移動乙個盤子,但是不能把較大的...
經典遞迴問題 漢諾塔
漢諾塔 漢諾塔問題第一次接觸時就感覺非常有趣,但是由於當時知識有限不能深刻地理解遞迴的含義,所以沒能繼續深究,現在來談一談吧。題目描述 漢諾塔 於印度傳說的乙個故事,上帝創造世界時作了三根金剛石柱子,在一根柱子上從上往下從小到大順序摞著64片 圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在...