您的位置:首页 > 编程语言 > Python开发

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

2017-12-09 16:09 666 查看
刚开始学python,不是太能理解这道题的揭发,直接在网上查找的案例代码,后来退了半天终于搞清楚了,故存于此处以免以后遗忘先上代码:def move(n, a, b, c):if(n == 1):print(a,"->",c)returnmove(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 递归