【问题标题】:Does a return statement stop the recursive stack from continuing?return 语句是否会阻止递归堆栈继续执行?
【发布时间】:2015-05-15 08:46:01
【问题描述】:

我正在为二叉搜索树编写 search_key 算法,但遇到了问题。我正在遍历二叉搜索树并使用基本递归技术的中序遍历算法比较节点。但是,当条件命中 (search_key == node[x]->value) 并且我返回节点时,似乎即使在我返回节点之后它仍然继续执行代码并且它会影响最终输出。即使遇到返回值,递归堆栈是否会继续?有没有办法解决这个问题?

【问题讨论】:

  • “好像”——基于什么证据?
  • 基于我添加了一些打印语句,它们执行了两次。当 print 语句后立即返回时。
  • 我们无法调试我们看不到的代码。

标签: c++ recursion binary-search-tree


【解决方案1】:

return 会从当前函数返回,但是当然在递归的情况下,你返回的地方是下一层,所以你可能需要检查结果并决定做什么,而不是继续搜索例如,树的另一边。

【讨论】:

  • 啊,完美的答案。没有办法以某种方式“结束”递归堆栈,是吗?
  • 如果你真的很绝望,你可能会抛出一个异常,使用longjmp 或使你的代码崩溃,但一般来说,不,你必须从每个级别返回,一次一个。
  • @ryan 如果第一个函数调用返回,“堆栈”结束。请注意,如果函数调用正在等待另一个函数调用返回,则它不能返回,就像它在等待另一个函数调用返回时不能运行 any 代码一样。
【解决方案2】:

您应该发布您正在谈论的代码的 sn-p。

除此之外,如果您调用了递归函数给定的次数,从该函数返回将使您返回到该函数的前一次调用。 return 语句不会停止执行之前的所有递归调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 2014-06-25
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2018-09-10
    相关资源
    最近更新 更多