【问题标题】:Iteration vs. Recursion for simple processing? [closed]简单处理的迭代与递归? [关闭]
【发布时间】:2015-08-25 10:52:14
【问题描述】:

我正在尝试将一个数字减少到所需的值范围,比如 x 直到它小于 100。我正在做的是将数字除以 10 直到它小于 100。

什么是更好的方法,递归还是迭代?

【问题讨论】:

  • 这可能是基于意见的问题,每个人都会对自己的答案有自己的理由,但在你的情况下,我更喜欢使用 for 循环,因为递归有自己维护调用堆栈的开销。

标签: loops recursion iteration


【解决方案1】:

迭代是你的朋友。
迭代:“重复某件事直到完成。”
递归:“通过将大问题分解为更小的问题来解决它 和更小的碎片,直到你能解决它;结合 结果。”

递归通常也慢得多,当迭代适用时,它几乎总是首选。

相关问题:Recursion vs Iteration

What is recursion and when should I use it?

【讨论】:

    【解决方案2】:

    递归方法在执行时间方面通常更昂贵(因为方法调用会引入额外的开销)。此外,如果递归太深,可能会导致 StackOverflow 异常(但可能不适用于您的情况,但如果您的初始数字足够小以保持递归调用的数量较少)

    因此,迭代是首选。

    【讨论】:

      【解决方案3】:

      我更喜欢迭代方法而不是递归方法。您可以做的一件很酷的事情是。

      for (;num > 100; num /=10) {}
      

      其中num 是您要除的数字。

      在一天结束时,编译器通常会找到最好的方法,因此请以您认为最合乎逻辑的方式设计您的程序。

      【讨论】:

        【解决方案4】:

        递归比迭代效率低,因为在递归期间调用堆栈被大量使用,因此进行递归调用通常会产生更多开销。

        迭代也比递归调用更容易理解和维护。在某些情况下,根据您编写算法的方式,递归算法的代码复杂度可能更高。见Iterative and recursive version has same complexity?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-02
          • 2012-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-05
          • 2018-08-16
          相关资源
          最近更新 更多