【问题标题】:Cause stack overflow through recursion通过递归导致堆栈溢出
【发布时间】:2016-07-18 22:41:20
【问题描述】:

我一直致力于在 C++ 中使用二叉树实现字符串的优先级队列。

我认为递归的简单性很棒。我不打算发布代码,因为我今天已经在调试器上花了很长时间,而且我不是要求有人为我调试,但基本上是在实现递归方法以使元素出队和插入元素并测试多达 1000 个的正确行为之后随机字符串 我使用了一个测试集线器,它尝试将 10000 个随机字符串排入队列,但出现堆栈溢出错误。在此之后,我为其他使用指针光标扫描我的树以使用相同的逻辑插入和出列的其他人更改了我的递归方法,并且它没有像我预期的那样崩溃(我几乎将它编码为链表)。

那么问题来了,即使我使用引用传递,我是否可以通过递归导致堆栈溢出?

这些递归方法是类的一部分并被定义为私有的。

我希望这个问题不是含糊的,但我在 c++ 方面的经验还不够。 非常感谢您的帮助!

【问题讨论】:

标签: recursion stack-overflow


【解决方案1】:

在递归中,您一次又一次地调用您的函数。在每次调用时,您都将堆栈内存用于parameters, stack variables and more。所以基本上答案是肯定是的,深度递归会导致堆栈溢出。

【讨论】:

  • 并且保证无限递归会导致错误。
  • @PM77-1 在有限的机器上:)
  • 我们只有有限的机器处于这种状态
  • 我确实考虑了我的代码中的错误,但我构建的插入函数实际上等同于此处找到的函数:cprogramming.com/tutorial/lesson18.html
  • @Lumbreras 没有人说你的代码是错误的。如果递归太深,即使是正确的递归代码也会导致堆栈溢出。也许您应该考虑另一种方法来完成您的任务。
猜你喜欢
  • 2011-02-26
  • 2018-10-29
  • 2013-04-05
  • 1970-01-01
  • 2020-12-17
  • 2020-05-04
相关资源
最近更新 更多