当前位置: 移动技术网 > IT编程>脚本编程>Python > 递归——汉诺塔问题(python实现)

递归——汉诺塔问题(python实现)

2018年08月22日  | 移动技术网IT编程  | 我要评论
规则 1. 每次移动一个盘子 2. 任何时候大盘子在下面,小盘子在上面 方法 假设共n个盘子 当n=1时: 1. 直接把A上的一个盘子移动到C上(A C) 当n=2时: 1. 把小盘子从A放到B上(A B) 这里开始采用参数,rsc源地址=A,dst目的地址=B 2. 把大盘子从A放到C上( A C ...

规则

  1. 每次移动一个盘子
  2. 任何时候大盘子在下面,小盘子在上面

方法

假设共n个盘子

  • 当n=1时:
    1. 直接把a上的一个盘子移动到c上(a->c)
  • 当n=2时:
    1. 把小盘子从a放到b上(a->b)这里开始采用参数,rsc源地址=a,dst目的地址=b
    2. 把大盘子从a放到c上( a->c)rsc=a, dst=c
    3. 把小盘子从b放到c上(b->c)rsc=b, dst=c
  • 当n=3时:
    1. 把a上的两个盘子,通过c移动到b上去, 调用递归实现(a-c->b)rsc=a, trans中转=c, dst=b
    2. 把a上剩下的一个最大盘子移动到c上(a->c)rsc=a, dst=c
    3. 把b上两个盘子,借助于a,挪到c上去, 调用递归(b-a->c)rsc=b, trans=a, dst=c
  • 当n=n时:

    1. 把a上的n-1个盘子,借助于c,移动到b上去,调用递归(a-c->b)rsc=a, trans=c, dst=b

    2. 把a上的最大一个盘子,移动到c上(a->c)rsc=a, dst=c

    3. 把b上n-1个盘子,借助于a,移动到c上, 调用递归(b-a->c)rsc=b, trans=a, dst=c

每次都是先将其他圆盘移到辅助柱子上,再将最底下的移到c,然后再把原先柱子作为辅助柱子,重复

代码实现

def move(n, a, b, c):
'''
汉诺塔的递归实现
n:代表几个盘子
a:代表第一个塔,rsc
b:代表第二个塔,trans
c:代表第三个塔, dst
'''
    if n == 1:
        print(a, '=>', c)
    else:
        move(n-1, a, c, b)
        print(a, '=>', c)
        move(n-1, b, a, c)

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网