关于Python递归案例——汉诺塔的理解


刚开始学python,不是太能理解这道题的揭发,直接在网上查找的案例代码,后来退了半天终于搞清楚了,故存于此处以免以后遗忘

先上代码:

def move(n, a, b, c):
    if(n == 1):
        print(a,"->",c)
        return
    move(n-1, a, c, b)
    move(1, a, b, c)
    move(n-1, b, a, c)
move(3, "a", "b", "c")

廖雪峰老师的题目是以三个盘为例,所以这里我也以三个盘作为n的参数进行推演。


move(3, "a", "b", "c") //首先是n=3时,不满足要求,跳到move(n-1, a, c, b)——>move(2,a,c,b)
    move(2, "a","c","b")   //然后n=2也不满足要求,跳到move(n-1, a, c, b)——>move(1,a,b,c)
        move(1, "a", "b", "c")    //此时n的值为1,满足if条件,执行print语句输出
            print("a", "->", "c")  //执行完后开始执行move(2,a,c,b)函数的第二第三句move语句  move(1, a, b, c)——>move(1,a,c,b) 和move(n-1, b, a, c)——>move(1,c,a,b)
         move(1, "a", "c", "b")  //此时n也为1,故执行print语句进行输出          
print("a", "->", "b")
        move(1, "c", "a", "b")   //此时n仍然为1,继续执行print语句输出
            print("c", "->", "b")   //此时n=3循环中的move(n-1, a, c, b)循环才最终结束,开始执行move(1, a, b, c)——>move(1, a, b, c)
move(1, "a", "b", "c")  //n=1,执行print语句输出
    print("a", "->", "c")    //现在开始执行move(3, a, b, c)递归的最后一个函数move(n-1, b, a, c)——>move(2, b, a, c)
move(2, "b", "a", "c")  //n=2,故执行下三句函数,首先执行move(n-1, a, c, b)——>move(1, b, c, a)
    move(1, "b", "c", "a")   //n=1,执行print语句输出
        print("b", "->", "a")
    move(1, "b", "a", "c")  //这里执行下三句函数的第二句move(1, a, b, c)——>move(1, b, a, c),由于n=1,执行print语句输出
        print("b", "->", "c")
    move(1, "a", "b", "c")  //执行最后一个函数move(n-1, b, a, c)——>move(1, a, b, c)
        print("a", "->", "c")  //n=1,执行print语句输出,完成整个汉诺塔函数的输出


你可能感兴趣的:(Python)