C語言實現遞迴經典 漢諾塔超詳解

2021-09-29 04:44:43 字數 845 閱讀 3414

漢諾塔問題是乙個經典的問題。漢諾塔(hanoi tower),又稱河內塔,源於印度乙個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,任何時候,在小圓盤上都不能放大圓盤,且在三根柱子之間一次只能移動乙個圓盤。問應該如何操作?

首先對問題進行分析

我們知道要將一根柱子的圓盤移動到另乙個柱子上 我們需要移動 2^64.但是不易人為確定每一步如何移動

因此我們需要將問題進行簡化處理

要將64個圓盤從柱一移動到柱三

我們需要將上面63個圓盤首先移動到柱二

再將最下面圓盤的從柱一移動到柱三

2

要將上面63個圓盤移動到柱三

我們需要將上面62個圓盤首先移動到柱二

再將倒數第二個圓盤從柱一移動到柱三

我們只需要重複上面的步驟 層層往下3

將上述過程分成兩步

第一步:將n-1個盤子從乙個柱子移動到另乙個柱子(n>1)

第二部:講乙個盤子從乙個柱子移動到另乙個柱子

#include

#include

//漢諾塔

void

move

(char x,

char y)

void

hanoi

(int n,

char a,

char b,

char c)

else

}int

main()

原創文章 zy

經典遞迴漢諾塔

演算法 當只有乙個盤子的時候,只需要從將a塔上的乙個盤子移到c塔上。當a塔上有兩個盤子是,先將a塔上的1號盤子 編號從上到下 移動到b塔上,再將a塔上的2號盤子移動的c塔上,最後將b塔上的小盤子移動到c塔上。當a塔上有3個盤子時,先將a塔上編號1至2的盤子 共2個 移動到b塔上 需借助c塔 然後將a...

經典漢諾塔問題 遞迴實現

問題由來 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金片 一次只移動一片,不管在哪根針上,小片必須在大片上面。僧侶們...

C語言實現漢諾塔問題

革啟部落格,革啟網,袁歡,袁歡的部落格,袁歡部落格 版本 vs2019社群版 功能 c語言漢諾塔問題 include void move char x,char y void move char x,char y void hannota int n,char one,char two,char t...