最近我的朋友参加了intv,他遇到了这个问题(intviewer从我对另一个问题的答案中提出这个问题) 说,我们可以选择使用其中之一 1)递归 - >使用系统堆栈,我认为操作系统会处理所有事情 2)仅将数据部分用于我们自己的堆栈并完成工作。 解决问题。你更倾向哪个?为什么? 假设堆栈大小不会超过100。
答案 0 :(得分:2)
我会使用系统堆栈。为什么重新发明轮子?
答案 1 :(得分:1)
函数调用虽然本身并不慢,但确实需要非零时间。因此,迭代解决方案可能会稍快一些。
答案 2 :(得分:1)
通常情况下,简单性不如轻微的性能提升。
如果您不打算使用1毫秒,请不要过度使用解决方案,并保持1毫秒的可维护性/可读性。
请记住,无论您使用哪种聪明的小黑客,都必须保持(并且已经证明首先可以解决这个问题),因为有许多标准/系统解决方案可供使用,这已得到证实。 (参见重新发明轮子)。
如果真的是系统性的,你可以减少内存分配并提高性能,那么你就可以完成工作,并准备花一些时间来证明你的解决方案更好/更快,更稳定。
答案 3 :(得分:1)
有兴趣在这里看到对递归的一般偏好,还有一些人认为递归实现必然更清晰或更易于维护......也许,也许不是: - )。
答案 4 :(得分:1)
取决于算法。小堆栈使用,系统堆栈。需要很多堆栈,继续堆。堆栈大小受操作系统限制,操作系统抛出stackoverflow ;-)如果algo使用更多堆栈空间,那么我将使用堆栈数据结构并将数据推送到堆上
答案 5 :(得分:0)
如果我明白你的观点,那么堆栈大小不仅会限制你使用其中一个。
但是想要使用递归...好吧,没有坏事,真的,对于堆栈的长度,但我宁愿自己做出解决方案。
尽可能避免递归。 :)
答案 6 :(得分:0)
递归可能是解决特定问题的最简单方法。迭代解决方案可能需要更多代码和更多错误机会。测试和维护成本可能高于性能优势。
答案 7 :(得分:0)
我会选择第一个,使用系统堆栈。据说FORTH语言有两个系统堆栈。一个是返回堆栈,另一个是参数堆栈。这提供了一些很好的灵活性