Nar*_*rek 55 c++ recursion limit
在Python中,有一个最大的递归深度.似乎这是因为Python是一个解释器,而不是编译器.C++有相同的概念吗?或者它只与RAM限制连接?
Don*_*ows 48
C++中的限制是由于堆栈的最大大小.这通常比RAM的大小少了几个数量级,但仍然相当大.(幸运的是,像字符串内容这样的大型内容通常不会保留在堆栈本身上.)
堆栈限制通常在OS级别可调.(ulimit
如果您使用的是Unix,请参阅内置shell 的文档.)此计算机(OSX)上的默认值为8 MB.
[编辑]当然,在计算你可以有多深入的时候,堆栈的大小本身并不完全有用.要知道这一点,您必须计算递归函数(也称为堆栈帧)的激活记录(或记录)的大小.最简单的方法(我知道)是使用反汇编程序(大多数调试程序的一个功能)并在每个函数的开头和结尾读出堆栈指针调整的大小.哪个很乱.(您可以通过其他方式解决这个问题 - 例如,计算两个调用中指向变量的指针之间的区别 - 但它们甚至更糟糕,特别是对于可移植代码.从反汇编中读取值更容易IMO.)
Jus*_*ier 22
不,C++没有明确的递归深度.如果超出最大堆栈大小(在Windows上默认为1 MB),则C++程序将溢出堆栈并终止执行.