在C ++中退出递归堆栈

时间:2011-12-23 20:42:28

标签: c++ recursion

有没有办法在c ++中完全退出递归堆栈。例如,我正在使用计算器搜索某个目标状态,当我发现只打印它并从所有的震荡堆栈中出来时。

5 个答案:

答案 0 :(得分:6)

最简单的方法(这在风格上是否最好是有问题的)可能是通过将递归函数包装在try / catch块中,然后通过抛出自定义异常退出某种包含计算结果的。这会自动将您的筹码展开到try / catch区块的水平,然后您可以从那里继续。

答案 1 :(得分:2)

异常将展开堆栈,但这通常是一个糟糕的选择。使用流控制的异常可能并不明智。维护可能会更加困难,特别是如果其他人必须更新代码并且不知道通过异常退出。最好的选择是从每个级别优雅地返回。

答案 2 :(得分:0)

异常使得这很简单,抛出和捕获异常可以让你一次跳出许多堆栈帧。

答案 3 :(得分:0)

你可以抛出异常,
但是使用尾递归时,不会出现“递归堆栈”

答案 4 :(得分:0)

当然,您可以使用异常来解除堆栈并适当地运行局部变量的析构函数。

或者你可以使用旧的setjmp/longjmp,它不会运行析构函数。如果有任何错过的析构函数,它将导致未定义的行为。