递归栈(hanoi问题)

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

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

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

(二、)算法如下:

这里写图片描述

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

(0.)从主程序进入
(1.)将1,2从 x 移到y z 为辅助(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移到 z x为辅助(递归):

(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 移到z x 为辅助:
(3.1)进入第三层,将1从y移到 x
(3.2)从第三层退回到第二层,在第二层,将2从y移到 z
(3.3)从第二层进入第三层,在第三层,将1从x移到 z <script type="math/tex" id="MathJax-Element-44">z</script>
退回到第二层
退回到第一层,回主程序
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值