C++ 函数递归的最大数目c++;

C++ 函数递归的最大数目c++;,c++,recursion,segmentation-fault,C++,Recursion,Segmentation Fault,假设我们有一个函数: void foo(int x) { foo(x); } 在我的机器上(i7)将运行约260k次,并生成分段故障。知道为什么会这样吗 每次调用函数时,它都需要运行时堆栈上的空间。这是函数的局部变量分配内存的地方。发生的情况是,您的递归次数太多,导致堆栈空间不足——堆栈溢出。(此站点的名称!) 另请参见:每次调用函数时,系统都会将其调用存储在堆栈中,在这种情况下,系统将继续存储函数调用,直到系统堆栈满为止。这种状态称为堆栈溢出。计算机上没有任何东西是无限的,即使堆栈大小26

假设我们有一个函数:

void foo(int x)
{
foo(x); 
}

在我的机器上(i7)将运行约260k次,并生成分段故障。知道为什么会这样吗

每次调用函数时,它都需要运行时堆栈上的空间。这是函数的局部变量分配内存的地方。发生的情况是,您的递归次数太多,导致堆栈空间不足——堆栈溢出。(此站点的名称!)


另请参见:

每次调用函数时,系统都会将其调用存储在堆栈中,在这种情况下,系统将继续存储函数调用,直到系统堆栈满为止。这种状态称为堆栈溢出。

计算机上没有任何东西是无限的,即使堆栈大小260k也不是很好。在其他一些环境中,这将少很多。考虑更新/精炼问题:标题(允许多少递归)和帖子中的问题(为什么出现SEG故障)发散。+ 1。但是允许的最大递归是什么?这其中有哪些因素?此外,示例案例可能是在优化/内联(通过什么/何处?)下的TCO。@pst,他的回答是否暗示它类似于(堆栈空间量)/(函数在堆栈上占用的空间量)。我想四舍五入。编辑:这是在忽略尾部递归,它可能会永远持续下去…@DavidD我只是想得出一个更详细的回答。我有点好奇C/C++是否有什么特别的话要说(保证、禁止或声明UB)。@pst:我认为标准没有定义任何限制。事实上,据我所知,标准甚至规定函数调用必须在堆栈上分配本地存储——只是堆栈是每个人都使用的范例。@sheu啊,更像是这样——记住更新答案。