漢諾塔(路徑的實現)

2022-09-10 19:21:12 字數 1064 閱讀 4895

這個問題最重要的就是要有遞迴的思想.

作為初學者的我對這個問題做了一些思考,最後我靠著自己的關於對遞迴的理解獨立完成了這件事,希望你們收穫自己獨立思考後完成後的成就感.

基本思想:

1.不管最左邊有多少層,就把它看成兩層,最底下一層和除去最底下一層的所有其他層.(我把它們分別記作base0,^base0)

(畫的醜了點,還請見諒,哈哈)

2.移動:

①^base0 from a to c

②base0 from a to b

③^base0 from c to a

3.好了,下面就是考慮^base0怎麼移動了

道理是一樣的,下面以拆分①的步驟為例

step1:^base1 from a to b

step2:base1 from a to c

step3:^base1 from b to c 

讀者有沒有發現2中步驟與3中步驟十分類似(沒找出來再仔細看看)

這時我們就可以把這三個步驟抽象為方法(函式)

下面放出最關鍵的遞迴函式

void f1(int n,char st,char

ed)

下面放出完整的原始碼

1

import

j**a.util.scanner;

2public

class

hanoi2

8else

return 'b';9}

10else

return 'a';11}

12public

static

void f(int n,char st,char

ed)19

public

static

void

main(string args)

2526 }

漢諾塔的實現

漢諾塔是大學遇見的第乙個使用遞迴的問題。這個問題的解決方法充分展示了遞迴給程式帶來的遍歷 如果不使用遞迴的話,那麼就需要細緻的分析。這裡不談非遞迴的解法。漢諾塔問題介紹 在印度,有這麼乙個古老的傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時...

漢諾塔的實現

漢諾塔的演算法就3個步驟 第一,把a上的n 1個盤通過c移動到b。第二,把a上的最下面的盤移到c。第三,因為n 1個盤全在b上了,所以把b當做a重複以上步驟就好了。所以演算法看起來就簡單多了。不過,思考過程還是很痛苦的,難以理解。遞迴中會儲存資料的好處在這裡又得到體現,太神奇了。include in...

python 漢諾塔 Python漢諾塔

import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...