''' 漢諾塔問題無論在任何編程語言裏都是經典問題,是採用遞歸算法的經典案例,該問題能夠抽象以下: 一 3根圓柱A,B,C,其中A上面串了n個圓盤 二 這些圓盤從上到下是按從小到大順序排列的,**大的圓盤任什麼時候刻不得位於小的圓盤上面** 三 **每次移動一個圓盤**,最終實現將全部圓盤移動到C上 利用Python語言接近天然語言的特性,開發者能夠更容易的將遞歸算法翻譯成程序語句,須要的代碼量很小。漢諾塔問題的解決步驟用語言描述很簡單,僅三步: A,B,C三個圓柱,分別爲初始位,過渡位,目標位,設A柱爲初始位,C位爲最終目標位 (1)將最上面的n-1個圓盤從初始位移動到過渡位 (2)將初始位的最底下的一個圓盤移動到目標位 (3)將過渡位的n-1個圓盤移動到目標位 對於遞歸算法中的嵌套函數f(n-1)來講,其初始位,過渡位,目標位發生了變化 ''' def move(n, a, b, c): # n爲圓盤數,a表明初始位圓柱,b表明過渡位圓柱,c表明目標位圓柱 if n == 1: print(a, '-->', c) else: move(n - 1, a, c, b) # 將初始位的n-1個圓盤移動到過渡位,此時初始位爲a,上一級函數的過渡位b即爲本級的目標位,上級的目標位c爲本級的過渡位 print(a, '-->', c) move(n - 1, b, a, c) # 將過渡位的n-1個圓盤移動到目標位,此時初始位爲b,上一級函數的目標位c即爲本級的目標位,上級的初始位a爲本級的過渡位 move(2, 'A', 'B', 'C') ''' A --> B A --> C B --> C ''' # n層當作兩層,1個爲1層,餘下的n-1層排序好了 # n-1層當作2層,1個爲1層,餘下的n-2層排序好了 # 5層當作2層,1個爲1層,餘下的4層排序好了 # 4層當作2層,1個爲1層,餘下的3層排序好了 # 3層當作2層,1個爲1層,餘下的2層排序好了 # 2層當作1層,1個爲1層,餘下的1層排序好了 # 1層 A-->C