锁定老帖子 主题:如果要用java实现算法,一定慎用递归
精华帖 (0) :: 良好帖 (0) :: 新手帖 (9) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-07
递归本身针对可扩展性多状况结构的数据有很强大处理能力.
如果要做一些可扩展的组件,递归是不可避免的. 不会递归可耻;滥用递归也可耻;不会正确的使用递归同样可耻。 |
|
返回顶楼 | |
发表时间:2011-04-07
最后修改:2011-04-07
用迭代来表示,即满足递归的明了,性能也相对来说可以接受:
结果以参数的形式传递,这样可以省去递归由于要保存栈信息而带来的开销。 |
|
返回顶楼 | |
发表时间:2011-04-07
个人感觉递归用于for循环次数不定的情况.
for for for ...... |
|
返回顶楼 | |
发表时间:2011-04-07
也要看什么情况啊楼主,有些算法递归实现确实很清晰,还有些算法把递归写成非递归形式还非常困难。比如alpha beta剪支我就不知道怎么写成非递归。
|
|
返回顶楼 | |
发表时间:2011-04-07
用递归的时候, 得清楚自己是在干么, 否则就不要用。 就跟用正则一样得道理。 很多东西没有完美。用的时候都得想清楚。
|
|
返回顶楼 | |
发表时间:2011-04-07
好贴,递归的用法还不是很清楚,在N很大的情况下递归的性能确实不乐观
|
|
返回顶楼 | |
发表时间:2011-04-08
kimmking 写道 cttnbcj 写道 除非疯子才一个一个算logx相加 .......
![]() 向楼上所说递归是用来简单化来表达数据处理的思想 要是不用递归试试计算 f(n)=f(n-1)+f(n-2)+f(n-3)+f(n-4)+f(n-5) 不管是用非递归或推数学公式(上面公式已经要计算一元五次方程的解了),会非常复杂 五次方程没有根式解, 手工计算5个根有点累。 计算机计算起来比较容易。 可以考虑用演化计算,选择一个比较好的算子,很快就能算出最优解 |
|
返回顶楼 | |
发表时间:2011-04-08
在Java中,JVM对递归调用有优化的,所以在很多情况之下递归调用的效率会比非递归高,lz的递归程序的例子并没有普遍意义,因为这个非递归程序没有用到栈结构,如果你真的要做例子,你可以在试试快速排序的递归和非递归算法。
|
|
返回顶楼 | |
发表时间:2011-04-08
不过对于递归很深的程序由于很容易引发 栈溢出异常,所以在这样的情况下,用非递归算法更合适一些。
|
|
返回顶楼 | |