python - python 中的汉诺塔,代码为 "counter"

标签 python python-2.x towers-of-hanoi

我已经用 python 编写了“汉诺塔”的代码,我正在尝试添加一个计数器来显示它运行了多少次。我尝试了一些东西,例如 while 循环和 for 循环等,但它不起作用。我确信答案很简单,但我的大脑现在运行在最低设置上。我的代码如下所示:

def Hanoi(n, src, dst, tmp):
if n > 0:
    Hanoi(n - 1, src, tmp, dst)
    print "Move disc", chr(64 + n), "From tower", src, "to tower", dst
    Hanoi(n - 1, tmp, dst, src)

Hanoi(4,0,2,1) #Just an example

我知道代码必须运行 (2^n)-1 次,但我就是无法实现它。因为我编写代码的方式 n 值发生了变化,所以这对我有用。 (我尝试过这样的事情:

def Hanoi(n, src, dst, tmp):

    a = 0
    while (a < (2**n)-1)
        a+=1

    if n > 0:
        Hanoi(n - 1, src, tmp, dst)
        print a, "Move disc", chr(64 + n), "From tower", src, "to tower", dst
        Hanoi(n - 1, tmp, dst, src)

但正如我所说,值 n 发生了变化,我不知道如何修复它。

编辑:

为了澄清,我希望它像这样存储步数:(如果我调用 Hanoi(3,0,2,1))

1. Move disc A From tower 0 to tower 2
2. Move disc B From tower 0 to tower 1
3. Move disc A From tower 2 to tower 1
4. Move disc C From tower 0 to tower 2
5. Move disc A From tower 1 to tower 0
6. Move disc B From tower 1 to tower 2
7. Move disc A From tower 0 to tower 2

最佳答案

如何返回函数的调用次数:

def Hanoi(n, src, dst, tmp):
    if n > 0:
        pre = Hanoi(n - 1, src, tmp, dst)
        print "Move disc", chr(64 + n), "From tower", src, "to tower", dst
        post = Hanoi(n - 1, tmp, dst, src)
        return pre + post + 1
    else:
        return 1

请注意,这计算的是对 Hanoi 函数的调用次数,而不是您实际玩游戏时实际需要进行的移动次数。如果您想要移动次数,只需将基本情况(最后一行)中的 return 1 更改为 return 0 即可。

关于python - python 中的汉诺塔,代码为 "counter",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21876214/

相关文章:

algorithm - 汉诺塔变体伪代码

python - 当 python 出现内存错误时,如何读取文件中的有限行

python - Django 多表单工厂

python - 将字符串传递给python中的文件打开函数

python - 从 str 派生的类的构造函数,具有不同的签名

python - 从列表指向字典变量

java - 汉诺塔与 Java 栈

java - 汉诺塔的堆栈实现和递归 (Java)

python - AWS Lambda 不断从 Lambda 返回 "\"Hello!\”

Python 与包含转义字符的字符串的绑定(bind)