列表形式的汉诺塔(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)java实现

汉诺塔(Tower of Hanoi) 递归代码实现 c语言(顺序栈实现)

汉诺塔问题(The Tower of Hanoi)的递归算法与非递归算法

CF392B Tower of Hanoi

用递归方法解决汉诺塔问题(Recursion Hanoi Tower Python)

Hanoi Tower 汉诺塔的简单分析/C