俄罗斯贵宾会-俄罗斯贵宾会官网
做最好的网站

python基础课堂笔记-俄罗斯贵宾会10-汉诺塔问题及list

方法

假设共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,然后再把原先柱子作为辅助柱子,重复

2、把A上剩下的一个最大盘子移动到C上,A->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)

汉诺塔问题
- 规则
1、每次移动一个盘子
2、任何时候大盘子在下面,小盘子在上面

规则

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

写在前面:笔记全部是跟着老师一起敲的代码,最近电脑瓦特了,所以只能用老爷机的日记本记下老师上课讲的东西,但我运行不了

特别感谢的是xx学院的的刘老师,我都是边看他的课,边学他一起敲代码,然后晚上自己看,自己理解,感谢老师。

2、把A上的最大盘子,也是唯一一个,移动到C上去,A->C

1、把A上的n-1个大盘子,借助于C,移动到B上去,调用递归

1、把A上的两个盘子,通过C移动到B上,调用递归实现

本文由俄罗斯贵宾会发布于编程,转载请注明出处:python基础课堂笔记-俄罗斯贵宾会10-汉诺塔问题及list

您可能还会对下面的文章感兴趣: