解释这个Python程序

时间:2015-10-01 08:59:15

标签: python recursion

def hanoi(n, A, C, B):
    def print_move(A, C):
        print(A, '-->', C)

    if n == 1:
        print_move(A, C)

    else:
        hanoi(n-1, A, B, C)
        hanoi(1, A, C, B)
        hanoi(n-1, B, C, A)

这是一个解决河内问题塔的程序,但我根本不理解。

  1. 程序什么时候结束?

  2. 当n-1变为1时,不应因为条件而陷入无限循环?

  3. 程序将按预期工作,直到河内(1,A,C,B),因为它将打印A - >的条件。 B,但不应该打印A - > C 1

  4. 任何递归函数都可以影响其他函数(hanoi2将n设置为1,但hanoi3也会使用1或n-1吗?)哪些行将按顺序执行?

2 个答案:

答案 0 :(得分:0)

该程序将在n == 1时结束,因为那时它将使用此案例:

if n == 1:
    print_move(A, C)

而不是这种情况:

else:
    hanoi(n-1, A, B, C)
    hanoi(1, A, C, B)
    hanoi(n-1, B, C, A)

更正式地说,我们知道它最终会到达n == 1,因为n在每次递归调用中都严格地转向这种情况。因此,n变量对于此递归是MinTTY Wiki, article Tips: Starting in a particular directory

答案 1 :(得分:-1)

这是解决河内问题塔的递归算法。

read more about it