列表形式的漢諾塔(Tower of Hanoi)Python語言實現
阿新 • • 發佈:2018-06-19
c語言指針 CA 指針 c語言 字符串 oba 小時 span 形式
從昨天半下午就開始想這個問題,到現在經過30個小時左右(期間並不思考是非常集中,因為連續思考很累而且可能效果不佳),終於把程序搞定了,第一次思考問題這麽久.算是第一個自主思考的程序還是很有成就感的.
代碼優勢:模塊化做的很好,找到了通過寫出前4-5次的數學表達,找到了規律並將其化成代碼.
代碼劣勢:規則化欠佳,因python無指針(網上說的,還不確定),沒有學到python中類似c語言指針的函數,造成本來一個模塊不得不分解為6個模塊相互調用.並且函數封裝不好,即因為不會類指針方法,所以用函數操作了全局變量.
上代碼:
def ac(k): global a global bglobal 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語言實現