论坛首页 Java企业应用论坛

如果要用java实现算法,一定慎用递归

浏览 13043 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (9) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-04-07  
递归本身针对可扩展性多状况结构的数据有很强大处理能力.
如果要做一些可扩展的组件,递归是不可避免的.
不会递归可耻;滥用递归也可耻;不会正确的使用递归同样可耻。
0 请登录后投票
   发表时间:2011-04-07   最后修改:2011-04-07
用迭代来表示,即满足递归的明了,性能也相对来说可以接受:
结果以参数的形式传递,这样可以省去递归由于要保存栈信息而带来的开销。
0 请登录后投票
   发表时间:2011-04-07  
个人感觉递归用于for循环次数不定的情况.
for
  for
    for
      ......
0 请登录后投票
   发表时间:2011-04-07  
也要看什么情况啊楼主,有些算法递归实现确实很清晰,还有些算法把递归写成非递归形式还非常困难。比如alpha beta剪支我就不知道怎么写成非递归。
0 请登录后投票
   发表时间:2011-04-07  
用递归的时候, 得清楚自己是在干么, 否则就不要用。 就跟用正则一样得道理。  很多东西没有完美。用的时候都得想清楚。
0 请登录后投票
   发表时间:2011-04-07  
好贴,递归的用法还不是很清楚,在N很大的情况下递归的性能确实不乐观
0 请登录后投票
   发表时间:2011-04-08  
kimmking 写道
cttnbcj 写道
除非疯子才一个一个算logx相加 .......
向楼上所说递归是用来简单化来表达数据处理的思想

要是不用递归试试计算 f(n)=f(n-1)+f(n-2)+f(n-3)+f(n-4)+f(n-5)
不管是用非递归或推数学公式(上面公式已经要计算一元五次方程的解了),会非常复杂

五次方程没有根式解,
手工计算5个根有点累。
计算机计算起来比较容易。

可以考虑用演化计算,选择一个比较好的算子,很快就能算出最优解
0 请登录后投票
   发表时间:2011-04-08  
在Java中,JVM对递归调用有优化的,所以在很多情况之下递归调用的效率会比非递归高,lz的递归程序的例子并没有普遍意义,因为这个非递归程序没有用到栈结构,如果你真的要做例子,你可以在试试快速排序的递归和非递归算法。
0 请登录后投票
   发表时间:2011-04-08  
不过对于递归很深的程序由于很容易引发 栈溢出异常,所以在这样的情况下,用非递归算法更合适一些。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics