社区
C++ 语言
帖子详情
递归和非递归(用栈)哪个效率更高?
runtospring
2009-04-11 09:25:24
1、递归和非递归(例如自己用栈实现八皇后问题)哪个效率更高?Google了一下,没有满意答案
2、不同的编译器编译相同的一段代码(指简单的、类似八皇后问题、迷宫问题这样的程序),是不是生成的.exe文件大小、效率也不同?
之前,我曾经把我的C++课程设计的代码(很垃圾的程序)放在vc++2008和Code::Block里分别生成.exe文件,运行时所占内存VC的要大,效率没法测试。
以上两个问题望高手解答~~感激不尽
...全文
4258
28
打赏
收藏
递归和非递归(用栈)哪个效率更高?
1、递归和非递归(例如自己用栈实现八皇后问题)哪个效率更高?Google了一下,没有满意答案 2、不同的编译器编译相同的一段代码(指简单的、类似八皇后问题、迷宫问题这样的程序),是不是生成的.exe文件大小、效率也不同? 之前,我曾经把我的C++课程设计的代码(很垃圾的程序)放在vc++2008和Code::Block里分别生成.exe文件,运行时所占内存VC的要大,效率没法测试。 以上两个问题望高手解答~~感激不尽
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lauhonyeung
2011-02-04
打赏
举报
回复
19楼是明白人,剩下的,大部分都是不懂装懂
YcdoiT
2010-11-01
打赏
举报
回复
上面那个程序是用来解决“整数划分问题”的经典算法。
YcdoiT
2010-11-01
打赏
举报
回复
我很确定 如果是用栈机械的模拟 那么非递归完全不如递归 差好几倍吧。。
我写的代码如下:
#include<iostream>
#include<stack>
#include<ctime>
using namespace std;
//---------------------------递归算法
int q(int n,int m)
{
if((n<1) || (m<0)) return 0;
if((n==1) ||(m==1)) return 1;
if(n<m) return q(n,n);
if(n==m)
return q(n,m-1)+1;
return q(n,m-1)+q(n-m,m);
}
int q(int num)
{
return q(num,num);
}
struct Point
{
int n,m;
Point(int _n,int _m){ n=_n; m=_m;}
};
//-------------------------非递归算法
int _q(int n,int m)
{
int sum=0;
Point tmp(n,m);
stack<Point> s;
s.push (tmp);
while(!s.empty())
{
tmp=s.top();
n=tmp.n; m=tmp.m;
s.pop();
if((n<1) || (m<0)) ++sum;
else if((n==1) ||(m==1)) ++sum;
else if(n<m) s.push(Point(n,n));
else if(n==m) { ++sum; s.push(Point(n,m-1)); }
else { s.push(Point(n,m-1)); s.push(Point(n-m,m)); }
}
return sum;
}
int _q(int num)
{
return _q(num,num);
}
int main()
{
int num;
unsigned int p;
do{
cout<<"Input a num:";
cin>>num;
p=clock();
cout<<" 递归: "<<q(num)<<endl;
cout<<"\t\t用时:"<<clock()-p<<endl;
p=clock();
cout<<"非递归: "<<_q(num)<<endl;
cout<<"\t\t用时:"<<clock()-p<<endl<<endl;
}while(num);
return 0;
}
CrescentS
2010-05-18
打赏
举报
回复
楼上的各位说法各异啊,有人能详细解释下么...
lx_616_at_yeah_net
2009-09-09
打赏
举报
回复
是的,在用栈的情况下 非递归确实不如递归 ...
^-^ ,你是第一个看法和我相同的人
ghostzitee
2009-08-31
打赏
举报
回复
[Quote=引用 19 楼 yashuwa0622 的回复:]
递归优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性
缺点:递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多
关于编译器,其实都大同小异,可能在侧重点方面有点点区别而已
[/Quote]
我用Java测试了一下(一千万个整数快速排序) 在用栈的情况下 非递归确实不如递归 ...
love514425
2009-04-13
打赏
举报
回复
> 当然是非递归的效率要高。
> 递归在执行的时候要开辟很多栈空间来使之运行。
一般用迭代(非递归)代替递归,但是代码可读性相对来说差一点而已!
yashuwa0622
2009-04-13
打赏
举报
回复
递归优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性
缺点:递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多
关于编译器,其实都大同小异,可能在侧重点方面有点点区别而已
lx_616_at_yeah_net
2009-04-13
打赏
举报
回复
1、递归和非递归(用栈)
非递归(用栈),也用到栈函数了,和递归就没多大区别了!
每次递归进栈出栈,非递归(用栈)的每次调用栈函数也是进栈出栈。
主要是在非递归(用栈)中,它的栈函数里比递归多了些赋值语句。。。
所以效率上,非递归(用栈)比递归差。
只不过,递归越深,占用栈空间越多。非递归(用栈),占用的栈空间少。
如果,递归的深度还没达到超出栈空间的程度,那么递归比非递归(用栈)好。
如果是非递归(不用栈),当然是非递归最好。
2、个人感觉,大多数的编译器优化手法,基本上大同小异,区别不大。
VC编译的Debug版本和Release版本里,Debug版本的程序生成会比较大。(说的是VC6.0,还没用过vc++2008)
z0203153008
2009-04-13
打赏
举报
回复
受教了
beyond071
2009-04-13
打赏
举报
回复
继续学习
taoyanxu1989
2009-04-13
打赏
举报
回复
学习了
xiaocha
2009-04-13
打赏
举报
回复
1、递归和非递归(例如自己用栈实现八皇后问题)哪个效率更高?Google了一下,没有满意答案
递归有一种特殊情况,叫尾递归,编译器可以很好的优化,与非递归没有区别
一般的递归,增加了调用的时间,效率稍差,但差别不像想象中的那么大,小程序可以忽略不计
2、不同的编译器编译相同的一段代码(指简单的、类似八皇后问题、迷宫问题这样的程序),是不是生成的.exe文件大小、效率也不同?
根据编译器不同,效率稍有区别,但基本相当,区别不大
cccll9
2009-04-12
打赏
举报
回复
关于递归与非递归的效率,空间复杂度的话,非递归完胜。时间复杂度要具体问题具体分析,一般来说递归的执行步数较多,非递归的执行频率较多。
yangch_nhcmo
2009-04-12
打赏
举报
回复
非递归效率高
runtospring
2009-04-12
打赏
举报
回复
顶起~还有哪位同学可以回答一下这个问题?
runtospring
2009-04-11
打赏
举报
回复
"性能和效率上,递归最先出局~~ "
性能和效率上,非递归最先出局~~
gao125210
2009-04-11
打赏
举报
回复
递归比迭代效率低,一般用递推代替递归,当然递归可读性强2跟编译器有关
SimonYeung
2009-04-11
打赏
举报
回复
非递归效率高;递归代码写出来思路清晰,可读性强。
恩 是这样的 循环比递归的效率高
小y正在思考人生
2009-04-11
打赏
举报
回复
性能和效率上,递归最先出局~~
但递代码如5楼说的~可读性强
加载更多回复(7)
构网型变流器正负序阻抗解耦特性及扫频验证研究(Simulink仿真实现)
内容概要:本文系统研究了构网型变流器的正负序阻抗解耦特性及其在弱电网环境下的稳定性表现,重点依托Matlab/Simulink仿真平台,构建了详细的阻抗数学模型,设计了解耦控制策略,并采用小信号扫频法进行频域辨识与稳定性验证。研究深入探讨了构网型变流器与传统跟网型逆变器在正负序阻抗特性上的本质差异,结合虚拟同步发电机(VSG)等先进控制技术,分析其在抑制宽频带振荡、削弱锁相环动态耦合等方面的优越性。文中不仅提供了完整的仿真模型与MATLAB代码实现,还整合了光伏、风电、储能、微电网等多类新能源系统的阻抗建模与稳定性分析资源,形成了一套面向新型电力系统稳定性的综合性技术资料体系,具有较强的科研复现与工程参考价值。; 适合人群:面向具备电力电子、电力系统自动化、新能源并网等专业背景的研究生、高校教师及工程技术人员,特别适用于从事阻抗建模、小干扰稳定性分析、宽频振荡机理研究以及撰写高水平学术论文的科研工作者。; 使用场景及目标:①掌握构网型变流器正负序阻抗建模与扫频辨识的仿真方法;②深入理解VSG等构网型控制在弱电网中提升稳定性的内在机理;③复现顶刊论文中的阻抗分析流程与稳定性判据应用;④利用提供的成熟模型与代码加速科研进程,支撑课题研究与学术成果产出。; 阅读建议:建议结合文中提供的Simulink模型与MATLAB代码,按照“理论建模—仿真搭建—扫频激励—频响提取—Nyquist判据分析”的完整流程进行实践操作,重点关注扫频信号的注入方式、频率范围设置及阻抗曲线的物理意义解读,并参考博士论文复现案例深化对复杂动态耦合问题的理解。
科技中介服务机构如何在区域科技创新数智大脑中提升服务效能?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
AgentAtlas:AI 编程项目的全景地图
AgentAtlas:AI 编程项目的全景地图
弱电网下虚拟同步发电机正负序阻抗建模仿真(Simulink仿真实现)
内容概要:本文围绕弱电网条件下虚拟同步发电机(VSG)的正负序阻抗建模与稳定性分析展开,利用Simulink搭建仿真模型,系统研究VSG在不对称电网环境下的动态响应特性。通过构建正负序阻抗模型,深入分析其在弱电网接入时的阻抗特性演变规律,并结合扫频法进行仿真验证,揭示VSG与电网之间的交互稳定性机理,为新能源并网系统的稳定运行提供理论支持和技术路径。研究涵盖控制策略对阻抗特性的影响、序阻抗建模方法及稳定性判据应用,具有较强的工程实践价值。; 适合人群:具备电力电子、电力系统分析基础知识,从事新能源并网、微电网控制、VSG技术研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握虚拟同步发电机在弱电网条件下的正负序阻抗建模方法;② 学习基于Simulink的扫频法仿真技术,用于分析并网系统稳定性;③ 深入理解VSG控制参数对系统稳定性的关键影响,支撑科研论文复现与创新研究; 阅读建议:建议结合相关博士论文及期刊文献,按照文档目录顺序逐步学习,重点动手实践Simulink模型搭建与扫频仿真流程,结合理论推导深化对阻抗建模与稳定性分析的理解。
科技中介服务机构如何依托科创数智大脑提升服务精准度与客户粘性?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章