堆栈上的面试问题

时间:2010-11-26 06:12:24

标签: stack

最近我的朋友参加了intv,他遇到了这个问题(intviewer从我对另一个问题的答案中提出这个问题) 说,我们可以选择使用其中之一 1)递归 - >使用系统堆栈,我认为操作系统会处理所有事情 2)仅将数据部分用于我们自己的堆栈并完成工作。 解决问题。你更倾向哪个?为什么? 假设堆栈大小不会超过100。

8 个答案:

答案 0 :(得分:2)

我会使用系统堆栈。为什么重新发明轮子?

答案 1 :(得分:1)

函数调用虽然本身并不慢,但确实需要非零时间。因此,迭代解决方案可能会稍快一些。

答案 2 :(得分:1)

通常情况下,简单性不如轻微的性能提升。

如果您不打算使用1毫秒,请不要过度使用解决方案,并保持1毫秒的可维护性/可读性。

请记住,无论您使用哪种聪明的小黑客,都必须保持(并且已经证明首先可以解决这个问题),因为有许多标准/系统解决方案可供使用,这已得到证实。 (参见重新发明轮子)。

如果真的是系统性的,你可以减少内存分配并提高性能,那么你就可以完成工作,并准备花一些时间来证明你的解决方案更好/更快,更稳定。

答案 3 :(得分:1)

有兴趣在这里看到对递归的一般偏好,还有一些人认为递归实现必然更清晰或更易于维护......也许,也许不是: - )。

  • 递归通常会避免显式循环
  • 递归有时可以简单地在函数内部使用局部变量来避免容器在计算结果时存储结果
  • 递归可以使反转子结果的收集顺序变得微不足道
  • 递归意味着对正在处理的信息的深度有限制,其中 - 循环实现通常可以轻松避免这种情况,或者至少具有更准确地反映数据处理需求的内存要求
    • 您希望软件适用范围越广,删除任意限制就越重要(例如现代vim,更少,GNU grep等UNIX软件对文件/行/表达式长度做出最小假设并动态尝试无论他们被问到什么/许多人都会记住旧的编辑器和供应商特定的实用程序,例如一个“天体”公司的grep,它永远不会在过长的行结束时匹配结果,SIGSEGVed,关闭,损坏或放慢的编辑器在长行或文件上无用)
  • 天真的递归会导致子结果的效率低得惊人
  • 有些人发现递归更容易理解,有些人发现更难 - 绝对适合我们比其他人更好地思考某些问题

答案 4 :(得分:1)

取决于算法。小堆栈使用,系统堆栈。需要很多堆栈,继续堆。堆栈大小受操作系统限制,操作系统抛出stackoverflow ;-)如果algo使用更多堆栈空间,那么我将使用堆栈数据结构并将数据推送到堆上

答案 5 :(得分:0)

嗯,我认为这会导致这个问题......

如果我明白你的观点,那么堆栈大小不仅会限制你使用其中一个。

但是想要使用递归...好吧,没有坏事,真的,对于堆栈的长度,但我宁愿自己做出解决方案。

尽可能避免递归。 :)

答案 6 :(得分:0)

递归可能是解决特定问题的最简单方法。迭代解决方案可能需要更多代码和更多错误机会。测试和维护成本可能高于性能优势。

答案 7 :(得分:0)

我会选择第一个,使用系统堆栈。据说FORTH语言有两个系统堆栈。一个是返回堆栈,另一个是参数堆栈。这提供了一些很好的灵活性