社区
数据结构与算法
帖子详情
递归的效率问题: 递归一定比迭代慢么?
meijing
2004-10-28 04:11:50
假设递归和非递归的算法分别如下, 迭代的效率会比递归高么? 为什么?
///////////////////////////////
// 迭代
f()
{
//do some work
}
for (int i = 0; i < 5; ++i)
{
f();
}
////////////////////
// 递归
f()
{
static int i = 5;
if (i > 0)
{
// do some work
f (--i);
}
}
...全文
1699
16
打赏
收藏
递归的效率问题: 递归一定比迭代慢么?
假设递归和非递归的算法分别如下, 迭代的效率会比递归高么? 为什么? /////////////////////////////// // 迭代 f() { //do some work } for (int i = 0; i 0) { // do some work f (--i); } }
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
metaphor
2004-11-04
打赏
举报
回复
在楼主的这个程序里迭代和递归的速度应该是一样的
因为它只是把一个循环调用变成了递归调用,没有像树那样展开去
但我看到其他迭代和递归作比较的时候情况不是这样的
在迭代的时候,函数只调用一次!在内部用堆栈实现递归的功能
这样用堆栈就减少了调用程序保护现场的开销。
meijing
2004-11-04
打赏
举报
回复
谢谢各位,明天结帖
DiabloWalkOnTheEarth
2004-11-04
打赏
举报
回复
在PC中堆栈最大不能超过64k
-------------------------------------------------
好像不是,WIN32下缺省是1M,还可以设置的更大,唉,现在我写的程序只有4K堆栈,郁闷啊.
crybigbaby
2004-11-03
打赏
举报
回复
1
从表面看,两者效率一样,但是你没有考虑计算机内核的处理,这时递归的效率远不如迭代,如果调用次数一样的话,迭代应比递归节约50%以上
meijing
2004-11-03
打赏
举报
回复
crybigbaby(寻找快乐)
能否具体讲讲计算机内核的处理上二者有什么不同?
谢谢
meijing
2004-11-02
打赏
举报
回复
谢谢各位大侠指点。
看了大家的指点,我的理解如下,不知对否?
1。递归调用慢就是指的函数调用带来的参数压栈和退栈所带来的开销
2。对于我举的例子而言,虽然表面一个采用递归,另一个用迭代。但是二者都同样有五次函数调用。所以二者的效率应该大致差不多。
3。采用递归的话,要小心系统分配给该进程的堆栈溢出?
zzwu
2004-10-30
打赏
举报
回复
利用堆栈作递归,最大缺点在于容易产生堆栈溢出:在PC中堆栈最大不能超过64k
xiaoxiaofei
2004-10-29
打赏
举报
回复
规模小的问题用递归好一点,因为代码比较简单明了;规模大的问题最好不要用递归,毕竟一般的电脑内存不是无限的啊.
mathe
2004-10-29
打赏
举报
回复
对于好一点的编译器,这两种方法产生的代码是一样的
merelynobody
2004-10-29
打赏
举报
回复
第一个例子是迭代吗?
我认为迭代应该是这种形式
对于f(x)=g(f(x-1)),f(0)=a
迭代:
for(i=1;i<n;i++)
fx[i]=g(fx[i-1]);
递归:
double f(double x)
{
if(x==0)
return a;
return g(f(x-1));
}
fx=f(N-1);
迭代就是递推,和递归相反的过程
ZhangYv
2004-10-29
打赏
举报
回复
例子2的比例子1多传进一个参数。我试过一些手工模拟堆栈的试验,发现执行效率不如系统自己的堆栈,因为自己写出入栈的运算,效率肯定不如汇编的push, pop了,但是手工模拟堆栈有个好处是可以自己控制堆栈的深度,这样更加安全一些。
迭代是不断重复某一过程;
递归是利用上一层的调用的返回结果来参与本层计算。
所以从本质上来说还是有点不太一样的。
caohoujie
2004-10-29
打赏
举报
回复
递归慢。我写过一些程序,用递归很简洁,改为非递归后代码很庞大,但时间要快一倍。
nicememory
2004-10-29
打赏
举报
回复
递归调用慢就是指的函数调用带来的参数压栈和退栈所带来的开销
因为很多递归问题的非递归形式是可以全部放在同一个函数中进行的
这个不是很大的问题
unix 6 的putchar 就是采用递归实现的,很优雅,但是估计效率应该不高
再有就是递归深度的问题了,如果问题规模很大,递归函数所展开的栈有可能耗尽栈空间,一般一个进程的栈空间也就几兆的样子而已
meijing
2004-10-28
打赏
举报
回复
在我给的例子中,迭代的方法也调用5次f(),是不是也建5次栈?
这方面的东西该看什么书?
jaredcsdn
2004-10-28
打赏
举报
回复
一样的算法,要把迭代写得比递归慢当然没问题(写的垃圾点就行了)。
不过如果两者都好好写的话,应该是迭代快,毕竟递归需要重新建栈。
huhuhu5
2004-10-28
打赏
举报
回复
这个不一定吧 我没有做过试验 也没有认真的研究过
把递归改为非递归 通常要自己建栈 所以 和功底有关把
不过通常认为 非递归要快些
Java学习07:
递归
和
迭代
效率
比较
递归
递归
是一种常见的解决
问题
的方法,即把
问题
逐渐简单化,
递归
的基本思想就是“自己调用自己”,一个使用
递归
技术的方法将会直接或者间接的调用自己。 利用
递归
可以简单的程序来解决一些复杂的
问题
,eg:斐波那契数列的计算、汉诺塔、快排等
问题
。
递归
结构包含两个部分: 1.定义
递归
头:什么时候不调用自身的方法。如果没有头,将陷入死循环,也就是
递归
的结束条件。 2.
递归
体:什么时候需要调用自身方法。 下面用...
递归
和
迭代
的 区别
一 概念:
递归
:程序调用自身的编程技巧,说白了就是函数自己调用自己。
迭代
:核心思想是通过可
迭代
对象,重复相同的算法。 二 优缺点:
递归
优点: 1)大
问题
化为小
问题
,可以极大的减少代码量; 2)用有限的语句来定义对象的无限集合.; 3)代码更简洁清晰,可读性更好
递归
缺点: 1)由于使用系统堆栈,
递归
太深容易造成堆栈的溢出,且大量函数调用,运行
效率
也比
迭代
要差。 迭...
迭代
和
递归
的理解和区别
最近做一些题经常会碰到
迭代
的方法解的,或者
递归
解法,容易搞混,特在此整理一下 一.
递归
: 由例子引出,先看看
递归
的经典案例都有哪些 1.斐波那契数列 斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、…… 这个数列从第三项开始,每一项都等于前两项之和。 2. 阶乘 n! = n * (n-1) * (n-2) * …* 1(n>0) 3.汉诺塔问...
递归
和
迭代
的比较
递归
和
迭代
----算法中的
递归
和
迭代
递归
递归
就是指程序调用自身的编程思想,即一个函数调用本身
递归
的使用能把一个复杂的
问题
,转化为一个与原
问题
相似的规模较小的
问题
来解决,可以极大的减少编程中的代码量
迭代
迭代
是利用已知的变量值,根据递推公式不断演进得到变量的一个新值的编程思想 二者比较
递归
中
一定
有
迭代
,但是
迭代
中不
一定
有
递归
;大部分可以相互转换。 相对来说,能用
迭代
不用
递归
...
递归
与
迭代
的区别是什么?
时间复杂度:
递归
和
迭代
在时间复杂度上可能相同,但具体表现取决于算法的设计和实现。例如,在斐波那契数列计算中,两者的时间复杂度均为O(n)。空间复杂度:
迭代
算法在空间复杂度上通常优于
递归
算法,因为
迭代
不需要额外的栈空间,而
递归
则需要维护调用栈,导致较高的空间消耗。选择
递归
还是
迭代
应根据具体
问题
的需求和算法的特性来决定。在需要简洁代码结构且
问题
规模较小的情况下,
递归
可能更合适;
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章