gpt4 book ai didi

c++ - 限制 C++ 中的递归调用(大约 5000 次)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:56 27 4
gpt4 key购买 nike

为了了解 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 );
}

当计数等于 4716 时程序停止!所以限制只是 4716 !我有点困惑!为什么程序在计数等于 4716 时停止执行!PS:在Visual studio 2010下执行。谢谢

最佳答案

递归调用的限制取决于堆栈的大小。 C++ 语言对此没有限制(根据内存,符合标准的编译器需要支持的函数调用数量有一个下限,这是一个非常小的值)。

是的,“无限”递归会在某个时刻停止。我不完全确定你还有什么期望。

值得注意的是,设计软件来执行“无限”递归(或运行成百上千次的递归)是一个非常糟糕的主意。没有(标准)方法可以找出堆栈的限制,并且您无法从堆栈溢出崩溃中恢复。

你还会发现,如果你添加一个数组或其他一些数据结构[并使用它,所以它不会被优化掉],递归限制会降低,因为每个堆栈帧在堆栈上使用更多空间.

编辑:我实际上希望有一个更高的限制,我怀疑您是在 Debug模式下编译代码。如果你在 Release模式下编译它,我预计你会得到几千个,甚至可能是无穷无尽的,因为编译器将你的尾递归转换成一个循环。

关于c++ - 限制 C++ 中的递归调用(大约 5000 次)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16126241/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com