中易网

求汉诺塔C递归算法详细解答

答案:1  悬赏:0  
解决时间 2021-10-25 15:12
求汉诺塔C递归算法详细解答
最佳答案
Hanoi塔问题, 算法分析如下,设A上有n个盘子。如果n=1,则将圆盘从A直接移动到C。如果n=2,则:(1)将A上的n-1(等于1)个圆盘移到B上;(2)再将A上的一个圆盘移到C上;(3)最后将B上的n-1(等于1)个圆盘移到C上。如果n=3,则:A)将A上的n-1(等于2,令其为n`)个圆盘移到B(借助于C),步骤如下:(1)将A上的n`-1(等于1)个圆盘移到C上。(2)将A上的一个圆盘移到B。(3)将C上的n`-1(等于1)个圆盘移到B。B)将A上的一个圆盘移到C。C)将B上的n-1(等于2,令其为n`)个圆盘移到C(借助A),步骤如下:(1)将B上的n`-1(等于1)个圆盘移到A。(2)将B上的一个盘子移到C。(3)将A上的n`-1(等于1)个圆盘移到C。到此,完成了三个圆盘的移动过程。从上面分析可以看出,当n大于等于2时, 移动的过程可分解为三个步骤:第一步 把A上的n-1个圆盘移到B上;第二步 把A上的一个圆盘移到C上;第三步 把B上的n-1个圆盘移到C上;其中第一步和第三步是类同的。 当n=3时,第一步和第三步又分解为类同的三步,即把n`-1个圆盘从一个针移到另一个针上,这里的n`=n-1。 Hanoi塔问题中函数调用时系统所做工作一个函数在运行期调用另一个函数时,在运行被调用函数之前,系统先完成3件事:①将所有的实参、返回地址等信息传递给被调用函数保存。②为被调用函数的局部变量分配存储区;③将控制转移到被调用函数的入口。从被调用函数返回调用函数前,系统也应完成3件事:①保存被调用函数的结果;②释放被调用函数的数据区;③依照被调用函数保存的返回地址将控制转移到调用函数。当有多个函数构成嵌套调用时,按照“后调用先返回”的原则(LIFO),上述函数之间的信息传递和控制转移必须通过“栈”来实现,即系统将整个程序运行时所需的数据空间安排在一个栈中,每当调用一个函数时,就为其在栈顶分配一个存储区,每当从一个函数退出时,就释放其存储区,因此当前运行函数的数据区必在栈顶。堆栈特点:LIFO,除非转移或中断,堆栈内容的存或取表现出线性表列的性质。正是如此,程序不要求跟踪当前进入堆栈的真实单元,而只要用一个具有自动递增或自动递减功能的堆栈计数器,便可正确指出最后一次信息在堆栈中存放的地址。一个递归函数的运行过程类型于多个函数的嵌套调用,只是调用函数和被调用函数是同一个函数。因此,和每次调用相关的一个重要的概念是递归函数运行的“层次”。假设调用该递归函数的主函数为第0层,则从主函数调用递归函数为进入第1层;从第i层递归调用本函数为进入下一层,即i+1层。反之,退出第i层递归应返回至上一层,即i-1层。为了保证递归函数正确执行,系统需设立一个“递归工作栈”,作为整个递归函数运行期间使用的数据存储区。每一层递归所需信息构成一个“工作记录”,其中包括所有实参、所有局部变量以及上一层的返回地址。每进入一层递归,就产生一个新的工作记录压入栈顶。每退出一层递归,就从栈顶弹出一个工作记录,则当前执行层的工作记录必是递归工作栈栈顶的工作记录,称这个记录为“活动记录”,并称指示活动记录的栈顶指针为“当前环境指针”。P.S.代码如您写的。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
实指望,乳丰臀肥腰包鼓(澳门景点)
上海浴场装潢拆除找哪家公司更好
90后女生适合学什么专业
0805电阻功率是什么?
为什么说深色的蜂蜜止咳效果更好呢?
迪信通(崇文门新世界二店)地址有知道的么?有
过江的向导----外交名词
安吉尔饮水机不制冷是怎么回事?
武汉船舶职业技术学院计算机网络技术(网上商
20岁男生戴黄金项链好看吗?
三江街/建设路中段(路口)地址在什么地方,想
砂浆喷涂机
杨木冲地址有知道的么?有点事想过去
成都日式茶楼装修设计有哪些公司?
包头整形美容那里权威?
推荐资讯
怀孕50天才检查出胚芽和心跳这样的小孩会不会
科帝工业冷风机 科帝厂房专用冷风机 科帝水冷
请问从淄博火车站到桓台县人才交流服务中心怎
求一部清穿小说!女主穿越回清朝和哪个阿哥相
全白色装修搭配效果哪种好?
小儿头皮有白点是怎么回事
电热膜电暖器和油汀哪个好
-嗜睡症的测试有哪些?
宁波哪里有女仆咖啡店,不是说动漫周边噢,就
旧时的黑唱片和唱机的工作原理时什么?
填歇后语:诸葛亮借箭—()......
电磁炉用哪种炒锅比较好炒菜?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?