gpt4 book ai didi

java - 打破java中的递归

转载 作者:IT老高 更新时间:2023-10-28 20:25:10 28 4
gpt4 key购买 nike

递归是一种“分而治之”的风格,它在变小时 split (树数据结构),如果发现违规,我希望它完全中断,这意味着打破所有递归路径,然后返回真的。这可能吗?

最佳答案

无论你做什么,你都必须展开堆栈。这留下了两个选择:

  1. 神奇的返回值(如其中一位 Toms 所述)
  2. 抛出异常(如 thaggie 所述)

如果您希望事情死掉的情况很少见,这可能是抛出异常可能是可行选择的情况之一。在每个人都对这件事嗤之以鼻之前,请记住,编程最重要的规则之一就是知道何时适合打破规则。

事实证明,我今天花了 google 代码评估 zxing 库。他们实际上对许多控制结构使用异常抛出。当我看到它时,我的第一印象是恐怖。他们实际上是用不同的参数调用方法数万次,直到该方法不抛出异常。

这看起来确实是一个性能问题,所以我做了一些调整,将事情改为使用魔法返回值。你知道吗?在调试器中运行时,代码速度提高了 40%。但是当我切换到非调试时,代码的速度不到 1%。

我仍然对在这种情况下使用异常进行流控制的决定并不疯狂(我的意思是,异常会一直抛出)。但考虑到几乎无法衡量的性能差异,我肯定不值得花时间重新实现它。

如果您触发迭代终止的条件不是算法的基本部分,则使用异常可能会使您的代码更简洁。对我来说,我做出这个决定的关键是如果整个递归需要展开,那么我会使用异常。如果只需要展开部分递归,请使用魔法返回值。

关于java - 打破java中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/856124/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com