python學習-之漢諾塔實現

先上代碼:spa

#move1/2方便分析循環時調用方法的邏輯順序
def
move1(n,a,b,c): print("-----------1號循環-----------") move(n,a,b,c) def move2(n,a,b,c): print("-----------2號循環-----------") move(n,a,b,c) def move(n,a,b,c): if n==1: return print("n=",n,"(","a=",a,"b=",b,"c=",c,")","***",a,"--->",c) else: move1(n-1,a,c,b) print("n=",n,"(","a=",a,"b=",b,"c=",c,")","***",a,"--->",c) move2(n-1,b,a,c) # print(n,"a1:",a,"b1:",b,"c1:",c) move(3,"A","B","C")

 

輸出結果:3d

-----------1號循環-----------
-----------1號循環-----------
n= 1 ( a= A b= B c= C ) *** A ---> C
n= 2 ( a= A b= C c= B ) *** A ---> B
-----------2號循環-----------
n= 1 ( a= C b= A c= B ) *** C ---> B
n= 3 ( a= A b= B c= C ) *** A ---> C
-----------2號循環-----------
-----------1號循環-----------
n= 1 ( a= B b= C c= A ) *** B ---> A
n= 2 ( a= B b= A c= C ) *** B ---> C
-----------2號循環-----------
n= 1 ( a= A b= B c= C ) *** A ---> C


分析要點有三:
一、方法遞歸時,程序的執行走向
二、方法遞歸時,參數的傳遞
三、爲何這樣能夠實現漢諾塔

下圖是n=3時,遞歸邏輯走向以及參數變化,n值增長時,以此類推。輸出順序便是執行順序,每【循環x】一次,輸出」-----------x號循環-----------「,且方法參數發生變化

 目前不太清晰的是,爲何這樣能夠實現漢諾塔,是由於這種參數變化正好符合漢諾塔的操做規則仍是其餘緣由。code

n爲偶數則先給B,奇數則先給C。blog

相關文章
相關標籤/搜索