本文章的代碼如下鏈接:https://github.com/RunningIOS/HanoiDemo
工作中偶爾用到遞歸編程,最近抽空看看網(wǎng)上的文章尝胆,在解決漢諾塔問題上的解決問題思路很受啟發(fā)。
經(jīng)典的漢諾塔問題(這里不具體介紹規(guī)則了)叶摄,面對看似相當復雜的問題科阎,如果按照一般的思維去思考整過移動過程那個累呀,總覺得沒底氣實現(xiàn)呀喷橙。如下圖所示,從左到右有A登舞、B贰逾、C三根柱子,其中A柱子上面有從小疊到大的n個圓盤菠秒,現(xiàn)要求將A柱子上的圓盤移到C柱子上去疙剑,期間只有一個原則:一次只能移到一個盤子且大盤子不能在小盤子上面,求移動的步驟和移動的次數(shù)
我們可以使用假設法進行分析問題:
要想A中的最大的圓盤移動到C中践叠,那么A上面的圓盤全部都得移動到B中言缤,然后再將A上面的圓盤全部移動到C中即可完成任務,那么如何將A上面的圓盤全部移動到C中呢禁灼,其實是可以重復了上面的移動方法管挟,所以移動過程可以這樣進行
1、將A上面的除最大的圓盤全部移動到B中
2弄捕、將A中最大的圓盤移動到C中
3僻孝、將B中的圓盤全部已到C中任務即可完成
為了完成3中的任務,又可以拆分任務
4守谓、現(xiàn)將B中的除最大的圓盤全部移動到A
5皮璧、將B中最大的圓盤移動到C中
6、將A中的全部圓盤移動到C中即可完成任務
為了完成6中的任務分飞,又可以拆分任務
.
.
.
面對一個很大的問題時悴务,我們嘗試分析出一些規(guī)律,嘗試拆分成小問題譬猫,然后再把小問題繼續(xù)拆分為更小的問題讯檐,循環(huán)往復地拆分下去,直到不能再拆分為止,對于這種問題就可以使用遞歸方法解決染服。