Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何启用递归函数以避免堆栈溢出?_C++_Recursion - Fatal编程技术网

C++ 如何启用递归函数以避免堆栈溢出?

C++ 如何启用递归函数以避免堆栈溢出?,c++,recursion,C++,Recursion,如果我在Java中有一个递归函数,我可以用以下代码无限调用它: void recfunction() { recfunction(); System.gc(); } P>没有一种标准的方法来强制C++编译器在递归函数上执行尾调用优化。 话虽如此,gcc8和-O2将在可能的情况下实际执行尾部呼叫优化 < P/> < P>没有强制的方法来强制C++编译器对递归函数进行尾调用优化。 话虽如此,gcc8和-O2将在可能的情况下实际执行尾部呼叫优化 您可以在Java中执行此操作吗?那

如果我在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++确实有垃圾收集器(它们只是不太受欢迎,因为我们有更好的方法来清理内存,这是确定性的)。