這個問題最重要的就是要有遞迴的思想.
作為初學者的我對這個問題做了一些思考,最後我靠著自己的關於對遞迴的理解獨立完成了這件事,希望你們收穫自己獨立思考後完成後的成就感.
基本思想:
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)
1import
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 ...