最近刚开始在学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')
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