下面以三层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>
退回到第二层
退回到第一层,回主程序