時隔七個月,我終於弄懂了漢諾塔的思想

2021-10-06 21:16:50 字數 1506 閱讀 6397

目錄

1.問題描述

2.漢諾塔的分析

3.博主的反思

4.**詳解

在印度,有這麼乙個古老的傳說:在世界中心貝拿勒斯(在印度北部)的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金片,1. 一次只移動一片; 2. 不管在哪根針上,小片必在大片上面。當所有的金片都從梵天穿好的那根針上移到另外一概針上時,世界就將在一聲霹靂中消滅,梵塔、廟宇和眾生都將同歸於盡。

假設我們要把a柱子上的金片移動到b柱子上。如果漢諾塔的a柱子有2個金片,那麼就是把最上邊的哪乙個金片移動v柱子上,再把a上面的另乙個金片移動到b柱子上,再把v柱子上的金片移動到b柱子上,就完成了工作。

如果有3個就是把上邊的第乙個金片(最小的)放在b柱子上,第二個金片放在v柱子上,再把第乙個金片從b柱子移動到v柱子上,然後把第三個金片(最大的金片)放在b柱子上,再把v柱子上的第一塊金片放在a柱子上,再把v柱子上的第二塊金片放在b柱子上,最後把a柱子上的第一片金片放在b柱子上,就完成了工作

其實仔細想想只要兩個或者兩個以上的金片都可以這麼看,假如有n(n>=2)個金片,那麼其實就只有三步,第一步把上面n-1個金片從a柱子放在v柱子上,把最大的金片放在b柱子上,最後把v柱子上的n-1塊金片移動到b柱子上,這就完成了(我們先不管他怎麼實現把n-1塊金片從乙個柱子移動到另乙個柱子)。我們把做完第二步的狀態分析一下:此時,最大的金片在b柱子上,n-1塊金片在v柱子上,由於b柱子上是最大金塊,所以可以把b柱子上的金塊看作沒有(其他n-1塊金片都比他小,都能放在這塊最大的金片的上面),那麼此時又回到了原來的問題,現在是只有n-1塊金片把它從v柱子移動到b柱子上(只是金片所在的初始位置的柱子變了而已),依次類推,是不是重複了n次同樣的操作把所有的金片從a柱子移動到了b柱子

博主比較笨,主要是博主過分的把重心放在**的實現上,導致博主剛開始看的時候無法理解,但是漢諾塔遞迴其實就是重複做一件事情,我們不用去管它到底是怎樣把b柱子作為輔助,把n-1塊金片從a柱子移動到v柱子上,這是遞迴內部的實現,我們只需要知道他就是在做同一件事情就行

#include

inthanio

(int n,

char a,

char v,

char b)

}int

main()

執行結果

失業七個月,面試六十家公司的深圳體驗 8

寫著迪卡儂的面試經歷,又想起了那段辛苦疲憊,失意喪氣的日子。看著自己就那麼整天不吃不喝,晚上也不睡的到處跑,到處找工作,心裡真的很酸。明明累到了極點,卻依然要裝作很精神很樂觀很自信的樣子 明明想放棄到極點了,卻依然必須撐下去,必須對所有人說,放心,我會堅持的。明明一開口就會哭的,卻必須強忍著,裝得很...

我三個月啦

我三個月啦 左直拳 我生下來已經三個多月了。情況還好,頭差不多可以完全抬起來,脖子也越來越穩固。不過醫生說我有點缺鈣,要多曬太陽。前一陣子天天下雨,難得有晴天,我只好整天悶在家裡,差不多發霉了。但是跟之前的 對比,我欣喜地發現自己的 變白了,粉嫩粉嫩的,簡直可以用白裡透紅來形容。同時我的兩塊臉蛋肥嘟...

我三個月啦

我三個月啦 左直拳 我生下來已經三個多月了。情況還好,頭差不多可以完全抬起來,脖子也越來越穩固。不過醫生說我有點缺鈣,要多曬太陽。前一陣子天天下雨,難得有晴天,我只好整天悶在家裡,差不多發霉了。但是跟之前的 對比,我欣喜地發現自己的 變白了,粉嫩粉嫩的,簡直可以用白裡透紅來形容。同時我的兩塊臉蛋肥嘟...