汉诺塔递归算法.docx

汉诺塔递归算法.docx

ID:59151720

大小:11.48 KB

页数:5页

时间:2020-09-11

汉诺塔递归算法.docx_第1页
汉诺塔递归算法.docx_第2页
汉诺塔递归算法.docx_第3页
汉诺塔递归算法.docx_第4页
汉诺塔递归算法.docx_第5页
资源描述:

《汉诺塔递归算法.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、5.5.2汉诺塔递归栈m问题抽象m3个塔,n个碟子m初始:所有碟子放在1号塔,大的在底下,小的在上面m任务:把碟子移动到2号塔,顺序不变,可用3号塔辅助m限制q每次只能移动一个碟子q总是大碟子在下,小的在上m递归解法m移动碟子的方法:move(n,t1,t2,t3)——将n个碟子从t1移到t2,t3辅助m可分解为3个步骤q将n-1个碟子从t1移到t3:move(n-1,t1,t3,t2)q将最大的碟子从t1移到t2q将n-1个碟子从t3移到t2:move(n-1,t3,t2,t1)m汉诺塔递归程序voidTowersOfHanoi(intn,intx,inty,intz){//Movethe

2、topndisksfromtowerxtotowery.//Usetowerzforintermediatestorage.if(n>0){TowersOfHanoi(n-1,x,z,y);cout<<"Movetopdiskfromtower"<

3、归返回的处理q若栈空,整个递归过程结束,跳出循环q否则,将调用者的活动记录弹出栈,恢复其环境,继续循环m递归函数不同入口的区分——返回地址的处理q上例:ENTRANCE、FIRST、SECONDq活动记录的一部分,与参数、局部变量一同压栈、出栈q在循环主体中,根据当前活动记录的入口值,执行不同代码m汉诺塔的递归栈实现#include#include#include#include#includeusingnamespace::std;enum{ENTRANCE=0,FIRST,SECOND};struct

4、ac{intn,x,y,z;intr;};m//汉诺塔的递归栈实现voidhanoi(intn,intx,inty,intz){stackstack;structacac={n,x,y,z,ENTRANCE};while(1){if(ac.n<=0){if(stack.empty())break;ac=stack.top();stack.pop();if(ac.r==ENTRANCE)ac.r=FIRST;elseac.r=SECOND;}m//汉诺塔递归栈实现if(ac.r==ENTRANCE){stack.push(ac);ac.n--;swap(ac.y,ac.z)

5、;}elseif(ac.r==FIRST){cout<<"Movetopdiskfromtower"<

6、*argv[]){intn;scanf("%d",&n);hanoi(n,1,2,3);return0;}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。