列表形式的汉诺塔(Tower of Hanoi)Python语言实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列表形式的汉诺塔(Tower of Hanoi)Python语言实现相关的知识,希望对你有一定的参考价值。
从昨天半下午就开始想这个问题,到现在经过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} b:{1} c:{2} ‘.format(a,b,c))
输出为:
a:
b:
c:fedcba9876543210
举一反三:上述代码是字符串形式的汉诺塔,容量有限且处理16个以上元素时表示不方便,后面会写一个列表形式的汉诺塔.
以上是关于列表形式的汉诺塔(Tower of Hanoi)Python语言实现的主要内容,如果未能解决你的问题,请参考以下文章
汉诺塔(Tower of Hanoi) 递归代码实现 c语言(顺序栈实现)
汉诺塔问题(The Tower of Hanoi)的递归算法与非递归算法