首页 > 编程知识 正文

汉诺塔Python,汉诺塔问题递归算法实现过程

时间:2023-05-06 12:04:40 阅读:153229 作者:2849

汉诺威算法

汉诺威

要用递归函数解决问题,必须完成递归的结束条件、递归公式这两个基本要素。 为了分析递归函数,以下分为3个步骤考虑这个问题。 说明: A.B.C分别表示三根柱子; 1、2、3分别表示3个圆盘,数字越大表示圆盘越大。

现在,我需要把a的所有圆盘移动到c

只有一个圆盘: 1

A - C

有两个圆盘。 一、二

A - B

A - C

B - C

有三个圆盘。 一、二、三

A - C

A - B

C - B

A - C

B - A

B - C

A - C观察以上结果后,每次最重要的一步是将A中最大的圆盘移动到C。

(1) a-c

)2) a-c

)3) a-c

)将A-C以上部分和以下部分加粗,可以看出其实是与完全相似的过程。 对于上面部分,使1.2个圆盘从起点a向终点b移动; 对于下面的部分,将1.2个圆盘从起点b移动到终点c (对于,将1.2个圆盘从a移动到c )。

因此的过程可以完全重复的过程来实现。 这也就是递归的思想。

在此定义函数后,#上面的部分: n-1个圆盘可以表示为a-bmov (从n-1,a,c,b ) #的中间部分开始)吗? #下方部分: b-cmov(n-1,b,a,c )至n-1个圆盘

这里是递归公式的表现。 最后,返回递归的结束条件:,每次最后的圆盘从A-C开始。 也就是上述代码中的中间部分#中间部分mov(1,a,b,c ) )

算法实现了---编码: UTF-8---def mov (n,a,b,c ) :

if n==1:

print(a,'-',c ) else:

mov(n-1,a,c,b ) ) ) )。

mov(1,a,b,c ) ) )。

mov(n-1,b,a,c ) ) )。

num=input ('请输入要移动的圆盘数量:')

mov(int(num )、' a )、' b )、' c ' )

程序截图

参考资料

作者: LeeLom

链接: https://www.Jian Shu.com/p/b 04087 DC6fdf

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