递归栈(hanoi问题)

来源:互联网 发布:秒赞秒评大师软件 编辑:程序博客网 时间:2024/06/08 16:43

下面以三层hanoi为例,说明递归过程运行的层次。

(一、)“三层hanoi问题”描述:

有三个分别命名为X,Y,Z的塔座,在X上有3个直径大小各不相同、依次编号为1,2,3的圆盘,现要求将X轴上的3个圆盘移至Z上,并仍按同样顺序叠排,圆盘移动时必须遵循下列规则:
1.)每次只能移动一个圆盘
2.)圆盘可以插在X,Y,Z中的任一塔座上
3.)任何时刻都不能将一个较大的圆盘压在娇小的圆盘上。
这里写图片描述

(二、)算法如下:

这里写图片描述

(三、)具体执行步骤如下:

(0.)从主程序进入

(1.)将1,2从x移到yz为辅助(1245递归进下一层):

(1.1)将1从x移到z(1239最内侧递归后,返回上一层)
(1.2)将2从x移到y(67本层最大圆盘移完,移辅塔上的递归层)
(1.3)将1从z移到y(1239最内侧递归后,返回上一层)

(2)将3从x移到z(67本层最大圆盘移完,移辅塔上的递归层)

(3)将1,2从y移到zx为辅助(递归):

(3.1)将1从y移到x(1239最内侧递归后,返回上一层)
(3.2)将2从y移到z(67本层最大圆盘移完,移辅塔上的递归层)
(3.3)将1从x移到z(1239最内侧递归后,返回上一层)

(四、)具体执行递归层栈的分配如下:

进入第一层,进入主程序

(1.)进入第二层,将1,2从x移到y

(1.1)进入第三层,将1从x移到z
(1.2)从第三层退回到第二层,在第二层,将2从x移到y
(1.3)从第二层进入第三层,在第三层,将1从z移到y

(2)退回第二层,退回第一层,将3从x移到z

(3)进入第二层,将1,2从y移到zx为辅助:

(3.1)进入第三层,将1从y移到x
(3.2)从第三层退回到第二层,在第二层,将2从y移到z
(3.3)从第二层进入第三层,在第三层,将1从x移到z

退回到第二层

退回到第一层,回主程序

原创粉丝点击