漢諾塔問題(遞迴方法的經典案例)

2021-10-02 19:54:10 字數 859 閱讀 7201

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

漢諾塔問題是遞迴演算法的經典案例,弄懂了漢諾塔問題對遞迴也就有了比較深刻的認識。這一篇部落格就是專門解決漢諾塔問題以及對遞迴的總結。

首先,要解決漢諾塔問題,得了解什麼是遞迴?

遞迴的體現是函式呼叫函式自身,遞迴是分治法的一種實現思路(方法)。

遞迴的優點:可以解決迭代解決不了的問題,**量少;

遞迴的缺點:當遞迴的次數多了,會占用較大的記憶體,並且會使程式執行時間成指數上公升;

遞迴是用的步驟: 前進段:將問題大化小;

結束段:當問題無法再化小的時候解決當前問題;

解決漢諾塔問題的思路:

化簡為最小單位三個圓盤,然後將其他圓盤也像三個圓盤一樣迴圈重複搬動

先將最小圓盤從x搬到z,然後將第二個圓盤搬到y,然後將x上的最小圓盤搬到y的第二個圓盤上放著,然後將第三個圓盤搬到z上,然後將y上的小圓盤放到x上,然後將y上的第二個圓盤放到z的第三個圓盤上,然後將x上的最小圓盤放到z上,這樣就完成了最小單位三個圓盤的搬運。然後依次遞迴,便可完成 64個圓盤的搬運,只不過是時間的問題。

漢諾塔問題的**很簡單,但是其思想還是有待深挖。

class hanno                                     

public static void hanno(int n,string begin,string mid,string end)else

}}

經典遞迴問題 漢諾塔

漢諾塔 漢諾塔問題第一次接觸時就感覺非常有趣,但是由於當時知識有限不能深刻地理解遞迴的含義,所以沒能繼續深究,現在來談一談吧。題目描述 漢諾塔 於印度傳說的乙個故事,上帝創造世界時作了三根金剛石柱子,在一根柱子上從上往下從小到大順序摞著64片 圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在...

經典問題 漢諾塔(遞迴)

c 如下 法國數學家愛德華 盧卡斯曾編寫過乙個印度的古老傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金片 一次只...

經典遞迴 漢諾塔問題

有三個柱子,三個盤子都在第乙個柱子上,現在要移到第三個柱子上,要求移動過程中盤子相對位置不變,小的還是在上,大的在下。思路 分兩步 1.將n 1個盤從乙個柱子移到另乙個柱子 借助另外乙個柱子 n 1 2.將1個盤子從乙個柱子移到另乙個柱子 用3個柱子移動n 1個盤子,目的 把所有盤子從x移到z vo...