今天继续学习递归 终于 终于把 去年学c语言没看懂也没去研究的汉诺塔解决了 感谢网上众多的老铁们的资料相助 和 宿舍学长的帮助,好了以下说理解后的思路:
(1 n == 1
第1次 1号盘 A---->C sum = 1 次
(2) n == 2
第1次 1号盘 A---->B
第2次 2号盘 A---->C
第3次 1号盘 B---->C sum = 3 次
(3)n == 3
第1次 1号盘 A---->C
第2次 2号盘 A---->B
第3次 1号盘 C---->B
第4次 3号盘 A---->C
第5次 1号盘 B---->A
第6次 2号盘 B---->C
第7次 1号盘 A---->C sum = 7 次
由以上可以看出从A-C(黑体)以上的是实现从A->B;以下的是实现从B->C;
所以呢 假设总的是 A B C 三个柱子,(A=初始 B=过度 C=目标)
我们首先要实现 n-1个盘子的 A->B;(A=初始 C=过度 B=目标)
之后把第n个盘子从 A->C;
之后实现之前n-1个盘子的 B->C; (B=初始 A=过度 C=目标)
并且把每个n-1 n-2 n-3 n-4......都当作n来进行 每一个都会递归道n=1的时候,这样我们的递归就出来了
以下是代码:
global step
step=0
def move(n,x,y,z):
global step
if n==1:
print("%s->%s"%(x,z))
else:
move(n-1,x,z,y)
print("%s->%s"%(x,z))
move(n-1,y,x,z)
step+=1
if __name__=="__main__":
num = int(input())
a='A'
b='B'
c='C'
move(num,a,b,c)
print(step)