汉诺威简介
汉诺威简要介绍:
有三根相邻的柱子。 将从左到右设为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 )的执行顺序。
通过绘画可以深入理解递归和汉诺威的递归结构。