递归这东西是不是尽量避免使用?

jackyjkchen 2009-12-06 04:12:21
最近写一些算法,用递归能让代码简化很多,但是递归层数确实不好控制,极可能是个栈溢出的隐患……默认栈的话不到5000次就崩了

可是貌似许多“高手”喜欢用递归……

看来我还是循环流……
...全文
1383 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyjkchen 2009-12-07
  • 打赏
  • 举报
回复
结了
honghu069 2009-12-06
  • 打赏
  • 举报
回复
递归和迭代,其实差不多
不要把原因归结到这两者上
如果算法不行的话,就算是迭代,运行的时间又能够忍受吗....
fdisksys 2009-12-06
  • 打赏
  • 举报
回复
搞什么飞机,我一句都听不懂
sduxiaoxiang 2009-12-06
  • 打赏
  • 举报
回复
能用动态规划也挺好

lovesi3344 2009-12-06
  • 打赏
  • 举报
回复
学习了
xiaoye 2009-12-06
  • 打赏
  • 举报
回复
菜鸟飘过
do_fork 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 gbb21 的回复:]
It depends. Actually,  some guys like manually manipulate a stack variable and use a "fake loop" to simulate recursive execution which won't be more efficient than direct recursive call. To prevent stack overflow, the most important thing is check your algorithm while not giving up the recursive.

By the way, the recursive way only waste CONSTANT  or O(log(N)) time than loop way, which should not be the critical point of your efficiency.
[/Quote]

正解。
英语不错啊。
gbb21 2009-12-06
  • 打赏
  • 举报
回复
It depends. Actually, some guys like manually manipulate a stack variable and use a "fake loop" to simulate recursive execution which won't be more efficient than direct recursive call. To prevent stack overflow, the most important thing is check your algorithm while not giving up the recursive.

By the way, the recursive way only waste CONSTANT or O(log(N)) time than loop way, which should not be the critical point of your efficiency.
  • 打赏
  • 举报
回复
8皇后,树的遍历这些情况,你不用递归多麻烦。很多时候用递归是因为它更符合人的思维方式。
当然递归很有可能导致效率低下,内存不足,但是合理的使用吧。
beginnow 2009-12-06
  • 打赏
  • 举报
回复
真正的递归好像是理论上居多,实用的程序很少用这个的吧,比较难控制
z569362161 2009-12-06
  • 打赏
  • 举报
回复
随心所欲.

你还差很多啊
thy38 2009-12-06
  • 打赏
  • 举报
回复
80-20原则,确实有性能问题时再去改成迭代。递归对问题的描述很清晰。
do_fork 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xuecyuyan 的回复:]
递归方便算法设计,但都可以修改成迭代以提高效率
[/Quote]

你把递归版的快排修改成迭代试试,能提高多少性能?
xuecyuyan 2009-12-06
  • 打赏
  • 举报
回复
递归方便算法设计,但都可以修改成迭代以提高效率
mstlq 2009-12-06
  • 打赏
  • 举报
回复
需要回溯的时候,一般我会用递归写个原型……
毕竟不那么容易出错……

效率不够的时候,再改别的实现方式……
wzlhahr 2009-12-06
  • 打赏
  • 举报
回复
当然可以用,控制好了就应该用,不过我也还是循环流
soon 2009-12-06
  • 打赏
  • 举报
回复
递归实现就是不断的调用自身,楼主应该知道调用函数之前需要进行把当前的一切东西进行保存在栈中,这样当函数返回时能无缝地接着运行,当调用资数太多时,栈就会用完,此时程序不会提示错误,而是直接结束程序的运行。也只有在PC机上可以应用递归,在嵌入式系统中,用不起,不敢用,因为嵌入式的内存一般都比较小。
也不知道对不对,这是本人的理解,若有不对之处,望高手指正。
wangxipu 2009-12-06
  • 打赏
  • 举报
回复
控制好深度

玩玩可以,不能用于大的项目,尤其是栈资源比较紧张的时候
wwwsssaaachaoge 2009-12-06
  • 打赏
  • 举报
回复
递归确实不好掌握呀,不过我已经精通了哈哈。
skyworth98 2009-12-06
  • 打赏
  • 举报
回复
这个看情况啦,像你说的,如果递归的层次太多了的话,就不少用为妙,因为不知道什么时候就栈溢出了,但是递归可以省好多事情的。

[Quote=引用楼主 jackyjkchen 的回复:]
最近写一些算法,用递归能让代码简化很多,但是递归层数确实不好控制,极可能是个栈溢出的隐患……默认栈的话不到5000次就崩了

可是貌似许多“高手”喜欢用递归……

看来我还是循环流……

[/Quote]
加载更多回复(8)

69,396

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧