河内塔使用递归Python

时间:2018-11-30 10:18:03

标签: python python-3.x recursion towers-of-hanoi

所以我在这里找到了很多有关该问题的主题,但是我当然有我自己的独特问题。

我必须使用一些名为hanoi_game的图形对象在Python 3中实现玩河内游戏的代码。

所以我对递归的理解很差,我还记得我在高中学习这个课程时,我从未真正真正地完全理解它,我发现很难以递归的方式思考问题。

这是我的代码:

def play_hanoi(hanoi, n, src, dest, temp):
    if n == 1:
        hanoi.move(src, dest) 
    play_hanoi(hanoi, n - 1, src, temp, dest)
    play_hanoi(hanoi, 1, src, dest, temp)
    play_hanoi(hanoi, n - 1, temp, dest, src)

首先,我知道我在算法上有一个错误,那就是一张大光盘放在一张小光盘上-我真的不知道出了什么问题,因为我没有很好地抓住这一过程。

其次,这是怎么回事?

考虑当我们有n = 3时:
我们用n = 2调用该函数,其中目标现在是临时杆,此n = 2将调用n = 1,它触发基本情况,这又将光盘移到最后一个光盘的前面。 现在转向(据我了解):

    play_hanoi(hanoi, 1, src, dest, temp)

将更大的一个移动到源中。

现在变成:

    play_hanoi(hanoi, n - 1, temp, dest, src)

其中n - 1 = 1和这一个位置会移动,我认为我们在临时控制杆中所拥有的会移动到目的地中的较大位置上方...

依此类推...

我不知道我的理解不正确。

谢谢。

0 个答案:

没有答案