C語言高階 7講 遞迴經典 漢諾塔

2021-08-10 09:29:09 字數 1759 閱讀 4399

問題描述:如何移動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片 圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在...