退出c++中的递归堆栈
Exit from the recursion stack in C++
在c++中有没有办法完全退出递归堆栈?例如,我正在使用递归搜索一些目标状态,当我找到时,只需打印它并从所有递归堆栈中出来。
做到这一点的最直接的方法(这在风格上是否最好是值得怀疑的)可能是通过将递归函数包装在try
/catch
块中,然后通过抛出包含计算结果的某种自定义异常退出。这将自动将堆栈展开到try
/catch
块的级别,然后您可以从那里继续。
异常将展开堆栈,但这通常是一个糟糕的选择。使用异常进行流控制可能是不明智的。维护可能会更加困难,特别是如果其他人必须更新代码并且不知道通过异常退出。最好的选择是从每个级别优雅地返回。
异常使得这非常简单,抛出和捕获异常可以让您一次跳出许多堆栈帧。
可以抛出异常,
但是对于尾部递归,就不会有"递归堆栈"
当然,您可以使用异常来展开堆栈并适当地运行局部变量的析构函数。
或者你可以使用旧的setjmp/longjmp
,它不会运行析构函数。在IIRC中,如果缺少析构函数,将导致未定义的行为。
相关文章:
- 如果我们通过引用传递变量,则递归中使用的堆栈空间量是否为零?
- 将公共递归转换为尾递归,因为大型输入的堆栈溢出
- 了解使用堆栈实现队列的递归调用机制
- 如何修复递归函数导致的堆栈溢出错误?C++
- 我遇到了有关递归的堆栈问题
- 使用 std::map 的递归堆栈分配如何工作?
- 具有全局定义变量的递归比没有全局定义变量的递归函数获得更多的堆栈.为什么?(跳入C++)
- 递归中的 C++ 引用(反转堆栈)
- 递归克隆图时的堆栈溢出
- 由于深度递归而导致堆栈溢出
- 5000+ 深度递归时函数堆栈溢出
- 递归如何使用堆栈数据结构
- 在递归功能中,我如何跳到堆栈上的其他功能调用
- C 堆栈溢出异常,可能是由于递归引起的
- 使用递归堆栈溢出
- 将递归模拟为堆栈返回错误
- 退出整个递归堆栈
- return 语句是否阻止递归堆栈继续
- 退出c++中的递归堆栈
- 可视化递归堆栈溢出