为了知道C++中递归调用的限制,我尝试了这个函数!
void recurse ( int count ) // Each call gets its own count
{
printf("%d\n",count );
// It is not necessary to increment count since each function's
// variables are separate (so each count will be initialized one greater)
recurse ( count + 1 );
}
Run Code Online (Sandbox Code Playgroud)
当计数等于4716时,该程序停止!所以限制只有4716 !! 我有点困惑!! 为什么程序在计数等于4716时停止执行!! PS:在Visual Studio 2010下执行.谢谢
Mat*_*son 11
递归调用的限制取决于堆栈的大小.C++语言不限制这一点(从内存来看,符合标准的编译器需要支持多少函数调用的下限,这是一个非常小的值).
是的,"无限"递归会在某个时刻停止.我不完全确定你还有什么期望.
值得注意的是,设计软件进行"无限"递归(或者运行成数百或数千次的递归)是一个非常糟糕的主意.没有(标准)方法来找出堆栈的限制,并且无法从堆栈溢出崩溃中恢复.
您还会发现,如果添加数组或其他数据结构[并使用它,因此它不会被优化],递归限制会降低,因为每个堆栈帧在堆栈上使用更多空间.
编辑:我实际上会期望更高的限制,我怀疑你是在调试模式下编译代码.如果你在发布模式下编译它,我希望你得到几千个,甚至可能无穷无尽,因为编译器会将你的尾递归转换为一个循环.