解释这个Python程序

解释这个Python程序,python,recursion,Python,Recursion,这是一个解决河内塔楼问题的程序,但我一点也不懂 节目什么时候结束 当n-1达到1时,它不应该因为条件而卡在无限循环中吗 该程序在hanoi(1,A,C,B)之前将按预期工作,因为它将打印A-->B,但它不应该打印A-->C吗 任何递归函数是否会影响其他函数(hanoi2将n设置为1,但hanoi3是否也使用1或n-1?)以及哪些行将按顺序执行 这是求解河内塔问题的递归算法 程序将在n==1时结束,因为此时它将使用这种情况: def hanoi(n, A, C, B): def print

这是一个解决河内塔楼问题的程序,但我一点也不懂

  • 节目什么时候结束

  • 当n-1达到1时,它不应该因为条件而卡在无限循环中吗

  • 该程序在hanoi(1,A,C,B)之前将按预期工作,因为它将打印A-->B,但它不应该打印A-->C吗

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


  • 这是求解河内塔问题的递归算法


    程序将在
    n==1
    时结束,因为此时它将使用这种情况:

    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)
    
    if n == 1:
        print_move(A, C)
    
    而不是这种情况:

    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)
    
    if n == 1:
        print_move(A, C)
    

    更正式地说,我们知道它最终将达到
    n==1
    ,因为
    n
    在每次递归调用中都严格地朝着这种情况发展。因此,
    n
    变量是这个递归的一个重要参数。

    #1:这肯定是你可以通过运行程序自己解决的问题#2:没有,你觉得为什么会这样#3:为什么您认为它会打印A-->B。在我看来,它似乎会打印A-->C。4:所有行都会按顺序执行。HANOI3将使用<代码> N-1/代码>,如图3所示,HANOI1将执行,直到它命中1,然后它将打印-> C,然后HANOII2应该打印-> B(并且它将),现在你明白为什么我会打印一个-> b?考虑使用一些类似的东西来自己处理这个问题。@ MyMyNess需要标记我(用@ DBLISS)让我看看你的留言。不,我不明白你为什么这么想。河内2是河内(1,A,C,B)。这导致
    print(A,'->',C)
    其中
    A
    A
    C
    C
    。我不知道这是否符合真正的答案。您可能已经发布了“google it”。只有当n==1时才会打印某些内容,但是有3个递归调用,所以应该只有3个答案,对吗?那么,程序将打印所有解决方案,您如何解释呢?每个非终止递归调用将进行三个新的递归调用。就像希腊神话中的那样。