首页 > 编程知识 正文

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

时间:2023-05-04 05:53:55 阅读:153230 作者:684

汉诺威简介

汉诺威简要介绍:

有三根相邻的柱子。 将从左到右设为a、b、c。 假设在a的柱子上从下到上呈金字塔状重叠了n个大小不同的圆盘。 把所有的盘子一个一个地移动到柱子b上。 而且,每次移动同一根柱子时,大盘子都不会出现在小盘子上。

递归移动构想

将圆盘的移动分解考虑为3个步骤:

第一步:

需要将最下方最大圆盘上的所有圆盘视为n-1个圆盘,经由C柱移动到B柱

步骤2 :

将最大的圆盘移动到C柱

第三步:

用a柱将n-1个圆盘移动到C柱

代码实现

count=0

EFHanoi(n,a,b,c ) :

全球计数

if n 0:

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

打印(f )移动(a )至(c ) ) )

count =1

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

Hanoi(4,' a ',' b ',' c ' )

print(f )全部({count} )步骤) )

假设只有四个圆盘

执行结果如下。

从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的移动

一共移动十五步

汉诺威递归图解:

首先调用函数Hanoi(4,a,b,c )判断N0后,继续调用Hanoi ) 3,a,c,b ),然后继续判断N0进入Hanoi ),然后进入Hanoi ) 1,a,c,b B )下面弹出并执行打印(从a移动到b ),执行结束后Hanoi ) 2,a,b,c )函数的打印)从a移动到c ),然后Hanoi ) 1,b,a,c )

这样到最后,打印在程序上的内容在结构图上以黄色高亮显示。 并给出了从Hanoi(4,a,b,c )到Hanoi ) 3,a,c,b )的执行顺序。

通过绘画可以深入理解递归和汉诺威的递归结构。

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