社区
数据结构与算法
帖子详情
汉若塔的非递归算法???
meng_tenboy
2001-07-13 04:06:32
...全文
148
4
打赏
收藏
汉若塔的非递归算法???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
meng_tenboy
2001-07-14
打赏
举报
回复
海星,考完了吗?
现在我可以好好的向你请教一番。
anjun
2001-07-13
打赏
举报
回复
哦
不好意思
搞错了
starfish
2001-07-13
打赏
举报
回复
anjun,人家要的是非递归的,不时递归的!
下面才是非递归的代码:
/* Non-recursive solution to Towers of Hanoi */
void main();
#include <stdio.h>
#define width (rings+1)
void main()
{
int rings, last, next, x, z[500], s[3];
printf("how many rings? "); scanf("%d",&rings);
for(x=1; x<=rings; x++) /* put rings on first peg */
z[x]=width-x;
for(x=0; x<=2*width; x+=width) /* set base for each peg */
z[x]=1000;
/* if even number of rings, put first ring on second peg; if odd, on third */
if(rings%2==0)
{
last=1; s[2]=0; s[1]=1;
z[width+1]=z[rings];
}
else
{
last=2; s[1]=0; s[2]=1;
z[2*width+1]=z[rings];
}
printf("from 1 to %d\n",last+1); s[0]=rings-1;
while(s[0]+s[1]) /* while first and second pegs aren't empty */
{
/* next ring to move is smaller of rings on the two pegs not moved onto last */
if(last==0) next=z[width+s[1]]<z[2*width+s[2]]?1:2;
if(last==1) next=z[s[0]]<z[2*width+s[2]]?0:2;
if(last==2) next=z[s[0]]<z[width+s[1]]?0:1;
/* top ring of 'to' peg must be larger and an even 'distance' away */
if((z[next*width+s[next]]>z[last*width+s[last]])||
((z[last*width+s[last]]-z[next*width+s[next]])%2==0)) last=3-next-last;
printf("from %d to %d\n",next+1,last+1);
s[next]=s[next]-1; s[last]=s[last]+1; /* move from 'next' to 'last' peg */
z[last*width+s[last]]=z[next*width+s[next]+1];
}
}
anjun
2001-07-13
打赏
举报
回复
class Hanoi
{
friend void TowersOfHanoi(int);
public:
void TowersOfHanoi(int n,int x,int y,int z);
private:
Stack<int>*S[4];
};
void Hanoi::TowerOfHanoi(int n,int x,int y,int z)
{
int d;
if(n>0)
{
TowersOfHanoi(n-1,x,z,y);
S[x]->Delete(d);
S[y]->Add(d);
ShoeState();
TowerOfHanoi(n-1,z,y,x);
}
}
void TowerOfHanoi(int n)
{
Hanoi X;
X.S[1]=new Stack<int>(n);
X.S[2]=new Stack<int>(n);
X.S[3]=new Stack<int>(n);
for(int d=n;d>0;d--)
X.S[1]->Add(d);
X.TowerOfHanoi(n,1,2,3)
}
汉若塔
游戏
非递归
解法(c#)
本文介绍了一种使用C#实现的汉诺塔问题
非递归
解决方案。该方案通过栈来跟踪移动步骤,避免了传统递归方法的堆栈溢出风险,适用于任意数量的盘子。
《汉诺塔》进阶内容
算法
本文深入探讨了《汉诺塔》的进阶问题,通过编程题的形式引入,解释了如何确定给定圆盘状态在最优移动轨迹中的位置。文章详细阐述了汉诺塔的三步移动原则,并提供了递归和
非递归
两种解决方案,帮助读者理解如何根据最大圆盘位置判断步骤数。
【Python编程】Python日志系统logging模块配置与最佳实践
内容概要:本文全面解析Python logging模块的架构设计与配置方法,重点对比Logger/Handler/Filter/Formatter四组件的职责分离与组合灵活性。文章从日志级别(DEBUG/INFO/WARNING/ERROR/CRITICAL)的语义定义出发,详解StreamHandler与FileHandler的输出分流、RotatingFileHandler的按大小/时间轮转策略、以及SMTPHandler的异常邮件告警机制。通过代码示例展示dictConfig的YAML/JSON外部配置加载、日志上下文(LoggerAdapter/extra参数)的请求追踪注入、以及多进程/多线程环境下的日志安全(QueueHandler/QueueListener),同时介绍structlog的结构化JSON日志输出、日志采样与速率限制(filters)的性能优化,最后给出在分布式系统、容器化部署、合规审计等场景下的日志规范设计与集中采集方案。 24直播网:m.guoxinbilin.com 24直播网:whlhjt.com 24直播网:fqfybjy.com 24直播网:m.ynbcxl.com 24直播网:m.nvdei.com
【Python编程】Python API开发之RESTful与GraphQL设计
内容概要:本文深入对比RESTful与GraphQL两种API设计范式在Python中的实现,重点分析资源导向与查询导向在数据获取效率、版本控制、缓存策略上的差异。文章从HTTP方法语义(GET/POST/PUT/PATCH/DELETE)出发,详解Flask-RESTful的资源类路由映射、Marshmallow的序列化/反序列化校验、以及HATEOAS超媒体驱动的API发现机制。通过代码示例展示Graphene的Schema定义、Resolver解析函数的N+1查询问题与DataLoader批处理优化、以及GraphQL的订阅(Subscription)实时推送实现,同时介绍FastAPI的自动OpenAPI文档生成、Pydantic模型的请求体验证与响应序列化、以及REST API的版本控制策略(URL路径/请求头/内容协商),最后给出在微服务网关、移动应用后端、数据聚合层等场景下的API设计原则与性能优化建议。 24直播网:m.btla.sc.cn 24直播网:kllhs.gs.cn 24直播网:www.jljlg.xz.cn 24直播网:www.jmnyey.xj.cn 24直播网:jznybyey.qh.cn
电池焊接设备【SW三维图+IGS+x_t】.rar
电池焊接设备【SW三维图+IGS+x_t】.rar
数据结构与算法
33,026
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章