Discuss / Python / 打卡

打卡

Topic source

看了知乎和b站的相关汉诺塔原理的帖子和视频,对汉诺塔的运行原理稍微理解了一点

附上相关链接

https://www.bilibili.com/video/av9830115/?spm_id_from=333.788.videocard.1

https://www.zhihu.com/question/24385418

代码如下:

def move(n,a,b,c):

**    if n ==1:**

**        print(a, '-->', c)**

**    else:**

**        move(n-1,a,c,b)**

**        move(1,a,b,c)**

**        move(n-1,b,a,c)**

设定三个柱子为a,b,c 

三个柱子在每次移动中分别被分为起点,中转站,和终点,

从起点到终点都需要经过中转

移动顺序为 起点 》》中转 》》 终点

def move(n,a,b,c):

**    if n ==1:**

**        print(a, '-->', c)**

汉诺塔的游戏规则为把a上的盘子全部按照从大到小的顺序移动到c上,大盘子上放小盘子,小盘子上不能放大盘子

a》》c这个总体的汉诺塔运动过程需要借助b作为中转站   只有把n-1个盘子全部移动到中转站b,才能把最后一个盘子也就是最大的盘子移动到终点c

所以我们先进行第一步,把n-1个盘子由ac移动到**b **

** else:**

**        move(n-1,a,c,b)**

这时候起点a上还有一个最大的盘子,我们需要把a上的最大的盘子移动到c 

move(1,a,b,c)

b上此时还有n-1个盘子,把n-1个盘子由bac

move(n-1,b,a,c)

def move(n,a,b,c):    if n ==1:        print(a, '-->', c)    else:        move(n-1,a,c,b)        move(1,a,b,c)        move(n-1,b,a,c)

  • 1

Reply