【发布时间】:2015-08-25 10:52:14
【问题描述】:
我正在尝试将一个数字减少到所需的值范围,比如 x 直到它小于 100。我正在做的是将数字除以 10 直到它小于 100。
什么是更好的方法,递归还是迭代?
【问题讨论】:
-
这可能是基于意见的问题,每个人都会对自己的答案有自己的理由,但在你的情况下,我更喜欢使用 for 循环,因为递归有自己维护调用堆栈的开销。
我正在尝试将一个数字减少到所需的值范围,比如 x 直到它小于 100。我正在做的是将数字除以 10 直到它小于 100。
什么是更好的方法,递归还是迭代?
【问题讨论】:
迭代是你的朋友。
迭代:“重复某件事直到完成。”
递归:“通过将大问题分解为更小的问题来解决它
和更小的碎片,直到你能解决它;结合
结果。”
递归通常也慢得多,当迭代适用时,它几乎总是首选。
相关问题:Recursion vs Iteration。
【讨论】:
递归方法在执行时间方面通常更昂贵(因为方法调用会引入额外的开销)。此外,如果递归太深,可能会导致 StackOverflow 异常(但可能不适用于您的情况,但如果您的初始数字足够小以保持递归调用的数量较少)
因此,迭代是首选。
【讨论】:
我更喜欢迭代方法而不是递归方法。您可以做的一件很酷的事情是。
for (;num > 100; num /=10) {}
其中num 是您要除的数字。
在一天结束时,编译器通常会找到最好的方法,因此请以您认为最合乎逻辑的方式设计您的程序。
【讨论】:
递归比迭代效率低,因为在递归期间调用堆栈被大量使用,因此进行递归调用通常会产生更多开销。
迭代也比递归调用更容易理解和维护。在某些情况下,根据您编写算法的方式,递归算法的代码复杂度可能更高。见Iterative and recursive version has same complexity?
【讨论】: