漢諾塔遞歸算法的理解

hanoi tower:

最近在學習python,講函數遞歸的章節時以漢諾塔爲例,說實話思考了很長一段時間:(⊙﹏⊙)b

把代碼貼出來,順帶寫下自己的理解:

#!/usr/bin/env python2
#coding:utf-8
def move(num,A,B,C):
    if num==1:
        print A,'-->',C
    else:
        move(num-1,A,C,B)        ###1
        move(1,A,B,C)<span style="white-space:pre">		</span> ###2
        move(num-1,B,A,C)        ###3
    pass
hanoi = input("please input the plates number:")
if isinstance(hanoi,(int)):#hanoi.isdigit():
    move(hanoi,'A','B','C')


首先這是個遞歸問題,要解決n層的漢諾塔問題需要先解決n-1層的漢諾塔問題,依次類推,最終就能解決問題n層漢諾塔問題了!他可以類比以遞歸的方式求解 n!  的問題。要求解 f(n)=n! 需要先求解 f(n-1);因爲 f(n) = n * f(n-1)(這樣說誰都知道,價值不大,O(∩_∩)O)。

第一步:要先解決  n  層的漢諾塔問題,要將  n-1 層的漢諾塔從A柱經C柱轉移到 B柱(對應###1),其本身也是一個遞歸問題;

第二步:需要將漢諾塔的第n層從A柱轉移到C柱(對應###2)(注意:是第n層,只是那一個圓餅,不是“n 層”,n個圓餅)。

第三步:現在的情況是B柱上有n-1層的漢諾塔(n-1個圓餅),C柱上只有一個,B柱爲空;這就是另一個循環開始的地方(對應###3)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章