1. 程式人生 > >列表形式的漢諾塔(Tower of Hanoi)Python語言實現

列表形式的漢諾塔(Tower of Hanoi)Python語言實現

c語言指針 CA 指針 c語言 字符串 oba 小時 span 形式

從昨天半下午就開始想這個問題,到現在經過30個小時左右(期間並不思考是非常集中,因為連續思考很累而且可能效果不佳),終於把程序搞定了,第一次思考問題這麽久.算是第一個自主思考的程序還是很有成就感的.

代碼優勢:模塊化做的很好,找到了通過寫出前4-5次的數學表達,找到了規律並將其化成代碼.

代碼劣勢:規則化欠佳,因python無指針(網上說的,還不確定),沒有學到python中類似c語言指針的函數,造成本來一個模塊不得不分解為6個模塊相互調用.並且函數封裝不好,即因為不會類指針方法,所以用函數操作了全局變量.

上代碼:

def ac(k):
    global a
    global b
    
global c if k==2: b+=a[-1];a=a[:-1] c+=a[-1];a=a[:-1] c+=b[-1];b=b[:-1] else: ab(k-1) ############### c+=a[-1];a=a[:-1] bc(k-1) def ab(k): global a global b global c if k==2: c+=a[-1];a=a[:-1] b+=a[-1];a=a[:-1] b
+=c[-1];c=c[:-1] else: ac(k-1) b+=a[-1];a=a[:-1] cb(k-1) def cb(k): global a global b global c if k==2: a+=c[-1];c=c[:-1] b+=c[-1];c=c[:-1] b+=a[-1];a=a[:-1] else: ca(k-1) b+=c[-1];c=c[:-1] ab(k-1) def ca(k):
global a global b global c if k==2: b+=c[-1];c=c[:-1] a+=c[-1];c=c[:-1] a+=b[-1];b=b[:-1] else: cb(k-1) a+=c[-1];c=c[:-1] ba(k-1) def ba(k): global a global b global c if k==2: c+=b[-1];b=b[:-1] a+=b[-1];b=b[:-1] a+=c[-1];c=c[:-1] else: bc(k-1) a+=b[-1];b=b[:-1] ca(k-1) def bc(k): global a global b global c if k==2: a+=b[-1];b=b[:-1] c+=b[-1];b=b[:-1] c+=a[-1];a=a[:-1] else: ba(k-1) c+=b[-1];b=b[:-1] ac(k-1) a=fedcba9876543210 b=‘‘ c=‘‘ ac(len(a)) print(a:{0}\nb:{1}\nc:{2}\n.format(a,b,c))

輸出為:

a:
b:
c:fedcba9876543210

舉一反三:上述代碼是字符串形式的漢諾塔,容量有限且處理16個以上元素時表示不方便,後面會寫一個列表形式的漢諾塔.

列表形式的漢諾塔(Tower of Hanoi)Python語言實現