首页 > 编程知识 正文

汉诺塔Python,汉诺塔递归算法图解

时间:2023-05-04 22:30:06 阅读:153226 作者:1405

前情提要:

让我先解释一下汉诺威的游戏规则。 如下图所示,有三根柱子a、b、c。 我们要做的是把a柱上的所有圆盘,全部转移到C柱上。 转移时遵循的规则如下。

1、一次只能移动一个圆盘

2、所有大圆盘都必须在小圆盘下

过程分析

首先假设只有一个圆盘。 将号码设为1,如下图所示。 这时,把a直接移动到c就可以了。

假设有两个圆盘,移动过程如下:

步骤1 :首先将1号盘从a移动到b;

(步骤2 )将第二盘从a移动到c;

步骤3 :最后将第1个磁盘从b移动到c,完成迁移。

好吧,让读者耐心一点,看看三个圆盘的转移过程是怎么进行的。 ((这里用文字说明,请让读者发挥想象。 )

首先,三个圆盘放置在a柱上,从上到下依次为编号1、2、3 (最小的为1,最大的为3 )。 首先,我们只考虑上面两个lgdhk点的圆盘)编号1、2 ),而不是3号盘。 前面分析了两个圆盘的移动过程,这两个圆盘应该移动到哪个柱上呢? 目前只有B柱可以选择,但C柱绝对不行。 因为C柱是目标柱,所以把1、2号盘从A柱移动到B柱,在C柱的帮助下,移动过程是A-C、A-B、C-B。 此时,1、2号盘已经到达B柱,将最大的3号盘直接移动到C柱。 工作在这个时候结束。 现在的状态是,1、2号盘在B柱,3号盘达到了目标C柱。 接下来,将1、2号盘从B柱移动到C柱,转移工作完全结束。 根据a柱的不同,转移过程是B-A、B-C、A-C。

从上面第一段加入红色的文字可以看出,a是开始柱,b是目标柱,c是辅助柱,从第二段加入红色的文字可以看出,b是开始柱,a是辅助柱,c是目标柱。

此时,函数的写法大致在脑海中形成了形状

函数定义

根据上面的分析可知,函数的参数有盘、a、b、c三个柱。 因此,函数的签名是move(n,a,b,c )。 这里,n表示圆盘的个数,a表示开始柱,b表示辅助柱,c表示目标柱。

根据对上述3个圆盘的分析,得到的函数定义如下(Python码)。

1defmove(n,a,b,c ) :2 IFN==1:3 printa '-- ' C4 return

5move(n-1,a,c,b )6printa '-- ' c7m ove (n-1,b,a,c ) )。

代码解释:

如果n=1,即只有一个圆盘,则直接输出a - c,即把圆盘从a移动到c (对应于第2、3行代码) ) )。

如果为n1,则处理第一个n-1圆盘,将第一个n-1圆盘从A移动到B柱,通过C柱(对应于第5行代码),接下来将第n个圆盘从A柱移动到C柱,最后将剩下的n-1圆盘,B柱移动到C柱

调用代码如下。 (四个圆盘)。

1move(4,' a ',' b ',' c ' )

结果如下。

A--B

A--C

B--C

A--B

C--A

C--B

A--B

A--C

B--C

B--A

C--A

B--C

A--B

A--C

B--C

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。