Python 河内塔代表处

Python 河内塔代表处,python,algorithm,recursion,Python,Algorithm,Recursion,我在用python实现这个问题时遇到了如下问题。我理解最初的河内塔问题,也就是说,可以移动$N$个磁盘到第三个磁盘,并且有算法可以这样做,但我不知道如何在每个阶段列出每个单独的磁盘。问题如下: 我想我可以使用二叉树表示法,如下所示: 到目前为止,我所想到的粗略的框架代码看起来与 def recursion(m,n,T): pos = list(range(1,m)) index = 0 values = list(range(1,n)) tree = []

我在用python实现这个问题时遇到了如下问题。我理解最初的河内塔问题,也就是说,可以移动$N$个磁盘到第三个磁盘,并且有算法可以这样做,但我不知道如何在每个阶段列出每个单独的磁盘。问题如下:

我想我可以使用二叉树表示法,如下所示:

到目前为止,我所想到的粗略的框架代码看起来与

def recursion(m,n,T):
    pos = list(range(1,m))
    index = 0
    values = list(range(1,n))
    tree = []
    if pos[index+1] > pos[index]:
        pos[index + 1] -=  pos[index+1]
        pos[index + 2] += pos[index+1]
        tree.append(pos)
    if pos[index+1] < pos[index]:
        pos[index+1] += pos[index]
        pos[index] -= pos[index]
        tree.append(pos)
    else:
        recursion()
    return tree

如果您没有将磁盘数传递给函数,我将非常感谢您的帮助,并且在您下次调用函数时,必须减少磁盘数。还有一个条件可以打破进一步的递归。这是修改过的表格

# n = no. of rods
def recurse(n , from_rod, to_rod, aux_rod):
    if n == 1:
        print "Move disk 1 from rod", from_rod, "to rod",to_rod
        return
    recurse(n-1, from_rod, aux_rod, to_rod)
    print "Move disk", n, "from rod", from, "to rod", to
    recurse(n-1, aux_rod, to_rod, from_rod)

n = 5
recurse(n, 'A', 'B', 'C')

这与ksai解决方案非常相似,只是它适用于Python3,我删除了额外的print和return语句

def move(disk , from_rod, to_rod, aux_rod):
    if disk >= 1:
        move(disk-1, from_rod, aux_rod, to_rod)
        print ("Move disk", disk, "from rod", from_rod, "to rod", to_rod)
        move(disk-1, aux_rod, to_rod, from_rod)

n = 3
move(n, 'A', 'B', 'C')
输出:


非常感谢。如果我想指定任意数量的杆,我会怎么做?我也想看到每一步可能的移动。例如,在T=2时,我有两种可能的移动方式。@PutsandCalls Tower of hanoi当且仅当磁盘数大于或等于3时,问题才成为问题