递归解决汉诺塔问题

1 投票
1 回答
1817 浏览
提问于 2025-04-17 14:27

我知道汉诺塔的基本概念,也了解它的算法,但在实现的时候遇到了一些困难。

class Hanoi:
    def __init__(self, n):
       == code==

    def move(self, src, dst):
   =code for moving the disk from source to destination==

    def spare(self, src, dst):
    ==Returns the peg which is not src and dst==

    def print_pegs(self):


h = Hanoi(4)

def hanoi(n, src, dst):         
        if n==1:
           h.move(src,dst)
        else:
            spare=h.spare(src,dst)
            hanoi(n-1,src,spare)
            hanoi(1,src,dst)
            hanoi(n-1,spare,dst)

hanoi(4, 0, 2)

我遇到的问题是,我不知道怎么把递归的定义和类的函数结合起来,以便移动盘子。

1 个回答

1

你需要把递归调用放在 move()spare() 这两个函数的内部,并把你的 hanoi() 函数的逻辑移到相应的方法里。

所以

class Hanoi(object):

    # snip

    def move(self, src, dst):

        # your logic goes here
        # example of a recursive call
        self.move(foo, bar)

撰写回答