关于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实现)
- 递归经典案例汉诺塔 python实现
- 关于python汉诺塔问题的代码消化理解
- 零基础入门学习Python(24)--递归:汉诺塔
- 经典递归解决汉诺塔问题 python实现
- Python中汉诺塔问题的理解
- 汉诺塔,python递归实现解法步骤
- 关于递归的理解
- 汉诺塔与递归之C++ 和Python实现
- 关于递归的理解,understanding about recursive
- 关于递归调用,函数指针,数组,字符串的一些理解
- 深入理解Python 关于supper 的 用法和原理
- 以汉诺塔来理解递归
- 关于python中decode和encode的一些理解
- 关于Python2/3多进程的一些个人理解
- [置顶] 建议53:用状态模式美化代码,关于python-state工具包的理解
- 汉诺塔问题递归求解(python)
- 5-0 关于递归本质的理解
- 关于递归的初步理解
- 利用Python的内嵌函数和递归研究汉诺塔问题