栈和队列篇·第五章·栈与递归·应用

 我来答
世纪网络17
2022-06-02 · TA获得超过5924个赞
知道小有建树答主
回答量:2426
采纳率:100%
帮助的人:139万
展开全部

假设有三个分别命名为X,Y,Z的灯塔,在X上有n个直径大小不同,以小到大编号1,2,...,n的圆盘。现要求将X上的n个圆盘移动到Z上并按照同样的次序堆叠排列,移动时必须遵守以下三点:
(1)每次只能移动一格圆盘
(2)圆盘可以放置在X,Y,Z任一塔上
(3)任何情况下都不能将大圆盘放到小圆盘上面

如果n=1,则这个圆盘直接从X移动到Z,否则执行以下步骤:
(1)用Z做中继,将X上的(n-1)个圆盘移动到Y上
(2)将X上的最后一个圆盘直接移动到Z上
(3)把X做中继,将Y轴上的(n-1)个圆盘移动到Z上

此时,通过重复以上步骤即可完成,对于术式表示如下:

首先要理解在计算机中的实现:调用函数与被调用函数之间的链接和信息交换必须通过栈进行,当一个函数运行期间调用另一个函数时,在运行该被调用函数之前,需要先完成以下的事情:

1.将所有的实际参数、返回地址等信息传递给被调用函数保存(形象的称为“保存现场”,以便需要时“恢复现场”返回到某一状态)
2.为被调用函数的局部变量分配储存空间
3.将控制转移到被调用函数的入口

从被调用函数返回调用函数之前,应完成以下:

1.保存被调用函数的计算结果
2.释放被调用函数的数据区
3.依照被调用函数保存的返回地址将控制转移到调用函数

对于多个函数嵌套的 调用的规则 是:后调用的先返回,此时内存管理实行“栈式管理”

对于hanoi(3,X,Y,Z)注意以下的变化情况:

//以上-1.21
//完整算法有时间再写XD-1.21

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式