C++ 如何启用递归函数以避免堆栈溢出?
如果我在Java中有一个递归函数,我可以用以下代码无限调用它:C++ 如何启用递归函数以避免堆栈溢出?,c++,recursion,C++,Recursion,如果我在Java中有一个递归函数,我可以用以下代码无限调用它: void recfunction() { recfunction(); System.gc(); } P>没有一种标准的方法来强制C++编译器在递归函数上执行尾调用优化。 话虽如此,gcc8和-O2将在可能的情况下实际执行尾部呼叫优化 < P/> < P>没有强制的方法来强制C++编译器对递归函数进行尾调用优化。 话虽如此,gcc8和-O2将在可能的情况下实际执行尾部呼叫优化 您可以在Java中执行此操作吗?那
void recfunction()
{
recfunction();
System.gc();
}
<如何在C++中实现这一点?
> P>没有一种标准的方法来强制C++编译器在递归函数上执行尾调用优化。 话虽如此,gcc8和-O2将在可能的情况下实际执行尾部呼叫优化
< P/> < P>没有强制的方法来强制C++编译器对递归函数进行尾调用优化。 话虽如此,gcc8和-O2将在可能的情况下实际执行尾部呼叫优化
您可以在Java中执行此操作吗?那么,在C++中,上面的代码在技术上是“无限的”,但是在实践中会很快耗尽你的堆栈和崩溃。我不知道它的意义是什么。摆脱递归。我不知道有哪种语言使用垃圾收集器来清理堆栈-垃圾收集器通常只管理堆分配的内存。这里有几个误解:1:上面的说法破坏了Java(除非编译器优化了尾部递归)。同样的事情发生在C++中。2:垃圾收集不会影响堆栈(它会清理堆)。3:C++确实有垃圾收集器(它们是不太流行的,因为我们有一种更好的方法来清理内存,这是确定性的)。你可以用java做这个吗?那么,在C++中,上面的代码在技术上是“无限的”,但是在实践中会很快耗尽你的堆栈和崩溃。我不知道它的意义是什么。摆脱递归。我不知道有哪种语言使用垃圾收集器来清理堆栈-垃圾收集器通常只管理堆分配的内存。这里有几个误解:1:上面的说法破坏了Java(除非编译器优化了尾部递归)。同样的事情发生在C++中。2:垃圾收集不会影响堆栈(它会清理堆)。3:C++确实有垃圾收集器(它们只是不太受欢迎,因为我们有更好的方法来清理内存,这是确定性的)。