菜鸟学python(01)—— 汉诺塔递归 理解
来源:互联网 发布:苏氏钻头淘宝 编辑:程序博客网 时间:2024/05/27 14:12
最近刚开始在学Python语言,预备课就开始讲递归,感觉有点小蒙圈,上课老师的例子是——汉诺塔,下面介绍下我自己的理解。
上图为汉诺塔
游戏规则:1.游戏有三个立柱,在其中一根中有从上到下依次增大的N个空心圆盘
2.玩家需要将空心圆盘通过另两个柱子进行移动
3.每次只能移动一个,且保证任何情况下上面的柱子比下面的小
4.问,经过多少次,怎样的步骤,将排列整齐的圆盘全部移到另一个圆盘
送上代码:
def hano(n,A,B,C) if n ==1: print(A,C) else: hano(n-1,A,C,B) hano(1,A,B,C) hano(n-1,B,A,C)hano(3,'a','b','c')
'''
特别注意:1.每一次实参进入的顺序
2.实参对形参赋值是一一对应的
3.递归完成才能进入下一条
4. 以下代码,大写表示型参,小写表示实参
n=3 #顺序结构进入
hano(3,A"a',B"b",C“c") # 将A=a,B=b,C=c,一一对应进行赋值
n=2
hano(2,A"a",C"c",B"b") #进入第一个递归 看清目前实参的顺序,上面已赋值,直接用
n=1(1,A"a",C"c",B"b")
print(A,C)
n=1(1,A"a",B"c",C"b")
print(A,C)
n=1(1,B"a",A"c",C"b")
print(A,C) #第一次递归结束
n=1
hano(1,A"a",B"b",C"c")
print(A,C) #递归以外的一次调用,A=a,B=b,C=c
n=2
hano(2,B"b",A"a",C"c") #进入第二个递归 注意实参的顺序, 实参是本次递归的顺序
n=1(1,A"b",C"a",B"c")
print(A,C)
n=1(1,A"b",B"a",C"c")
print(A,C)
n=1(1,B"b",A"a",C"c")
print(A,C) #第二次递归完成
'''
以下是代码打印出来的结果:a c
a b
c b
a c
b a
b c
a c
特别注意:1.每一次实参进入的顺序
2.实参对形参赋值是一一对应的
3.递归完成才能进入下一条
4. 以下代码,大写表示型参,小写表示实参
hano(3,A"a',B"b",C“c") # 将A=a,B=b,C=c,一一对应进行赋值
n=2
hano(2,A"a",C"c",B"b") #进入第一个递归 看清目前实参的顺序,上面已赋值,直接用
n=1(1,A"a",C"c",B"b")
print(A,C)
n=1(1,A"a",B"c",C"b")
print(A,C)
n=1(1,B"a",A"c",C"b")
print(A,C) #第一次递归结束
n=1
hano(1,A"a",B"b",C"c")
print(A,C) #递归以外的一次调用,A=a,B=b,C=c
n=2
hano(2,B"b",A"a",C"c") #进入第二个递归 注意实参的顺序, 实参是本次递归的顺序
n=1(1,A"b",C"a",B"c")
print(A,C)
n=1(1,A"b",B"a",C"c")
print(A,C)
n=1(1,B"b",A"a",C"c")
print(A,C) #第二次递归完成
'''
阅读全文
0 0
- 菜鸟学python(01)—— 汉诺塔递归 理解
- 学python(01)——一个小白关于递归的理解
- 学Python(2)—递归
- 菜鸟学python(02)—— 基础笔记整理
- 菜鸟学python(04) —— 基础笔记整理
- 菜鸟学python(05)——装饰器
- 菜鸟学Python(一)
- 关于Python递归案例——汉诺塔的理解
- 菜鸟学python(03)—— 闭包的两种方法
- 菜鸟学Python(1):工欲善其事,必先利其器
- 菜鸟学Python(4):编码问题
- 菜鸟学Python(10):初学JSON
- 菜鸟学Python(1):工欲善其事,必先利其器
- 菜鸟学Python(4):编码问题
- 菜鸟学Python(10):初学JSON
- 菜鸟学python-基础(2)
- 菜鸟学python-基础(3)
- 菜鸟学 Python-Class
- eclipse安装黑色插件方法
- 机器学习初学者必须知道的十大算法
- dedecms模板中dedeajax2.js导致网页无法打开
- IDEA中快捷为类重写equals和hashCode方法
- Java_List常见方法
- 菜鸟学python(01)—— 汉诺塔递归 理解
- Eclipse中的创建maven项目,无法添加src/main/java等source folder
- C#中$的用法
- Fatal error: Call to a member function..的解决方法
- javajdbc
- jquery对象和dom元素的转换
- python学习---第十四天
- dedecms提示:内存错误,下载解压版base_dic_full.dic
- python随机生成手机号