社区
C++ 语言
帖子详情
递归和非递归(用栈)哪个效率更高?
runtospring
2009-04-11 09:25:24
1、递归和非递归(例如自己用栈实现八皇后问题)哪个效率更高?Google了一下,没有满意答案
2、不同的编译器编译相同的一段代码(指简单的、类似八皇后问题、迷宫问题这样的程序),是不是生成的.exe文件大小、效率也不同?
之前,我曾经把我的C++课程设计的代码(很垃圾的程序)放在vc++2008和Code::Block里分别生成.exe文件,运行时所占内存VC的要大,效率没法测试。
以上两个问题望高手解答~~感激不尽
...全文
4146
28
打赏
收藏
递归和非递归(用栈)哪个效率更高?
1、递归和非递归(例如自己用栈实现八皇后问题)哪个效率更高?Google了一下,没有满意答案 2、不同的编译器编译相同的一段代码(指简单的、类似八皇后问题、迷宫问题这样的程序),是不是生成的.exe文件大小、效率也不同? 之前,我曾经把我的C++课程设计的代码(很垃圾的程序)放在vc++2008和Code::Block里分别生成.exe文件,运行时所占内存VC的要大,效率没法测试。 以上两个问题望高手解答~~感激不尽
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
ackermann函数的
递归
实现和
非
递归
实现
ackman函数的
递归
和
非
递归
,学习数据结构的素材,
非
递归
是使用堆栈实现的。
递归
算法与
非
递归
转化
递归
与
非
递归
的相互转化以及各自的时间
效率
相比较,各自在实际中的应用举例
java编写的
递归
与
非
递归
对于
递归
算法,其重点是书写
递归
函数;而对于
非
递归
使
用栈
或者队列实现。
汉诺塔
递归
与
非
递归
两种算法的代码与结果对比
汉诺塔
递归
与
非
递归
结果对比,结果是no differences,说明
非
递归
算法没错。
递归
算法参考了csdn另一名博主的博客。
二分搜索的
递归
和
非
递归
实现
二分搜索的
递归
和
非
递归
实现。比较简单的实现。
C++ 语言
65,184
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章