找到最大递归深度

Jep*_*sen 11 c++ recursion

有没有办法在c ++中知道最大递归深度而不显式调用递归直到它崩溃?

我已经看到它受到堆栈大小的限制.也许在特定的递归级别找到堆栈中的可用空间量是有用的.可能吗?

rba*_*dar 2

我现在唯一能想到的就是用来getrlimit获取专用于您的进程的堆栈的最大大小。接下来要做的就是找到一种获取当前使用的堆栈大小的方法。我认为这getrusage是要走的路,但在查看了man-page 和 SO 上的几篇文章后,它似乎不再支持这个特定功能。所以你必须寻找另一种方法。我确实相信它Valgrind还会报告堆栈使用情况,因此研究其源代码和文档可能会很有用。

一旦您能够获得当前堆栈大小,您就可以测量

  • 开始递归之前的初始状态(这样您就可以将其从计算中排除,因为它与递归本身没有任何关系)

  • 单次迭代的变化

排除初始堆栈分配以及使用总堆栈大小和单个递归步骤所需的分配,您应该能够估算给定系统可以拥有的递归数量。我不确定它是否有效,而且即使准确,此类测量也高度依赖于您所使用的系统(毕竟堆栈与进程可以拥有的虚拟内存量密切相关)。