gpt4 book ai didi

recursion - 无限循环和没有停止条件的递归函数何时最终停止?

转载 作者:行者123 更新时间:2023-12-03 08:21:41 24 4
gpt4 key购买 nike

我听到一个神话说无限循环或没有停止条件的递归函数会在“堆栈溢出”时停止。这样对吗?

例如 :

void call()
{
call();
}

或者
for(;;){;}

当堆栈溢出时,它们真的会停止吗?

更新 : 如果真的停止了,我能检测到递归调用了多少次吗?

最佳答案

这实际上取决于语言的选择。

在某些语言中,您的无限递归函数将因基于系统或语言相关条件的堆栈溢出而停止。这样做的原因是许多函数调用和返回的实现会为每个函数调用分配新的空间,当空间耗尽时程序将失败。然而,其他语言(Scheme 和各种 gcc 优化级别)实际上会让这个程序永远运行,因为它们足够聪明,意识到它们可以为每次调用重用空间。

在某些语言中,无限循环将永远运行。您的程序将继续运行,永远不会取得进展。在其他语言中,编译器允许对无限循环进行优化。例如,C++ 标准说编译器可以假设任何循环要么终止,要么执行一些全局可见的操作,因此如果编译器看到无限循环,它可能只会优化循环不存在,所以循环实际上确实终止了。

换句话说,这真的取决于。这个问题没有固定的答案。

希望这可以帮助!

关于recursion - 无限循环和没有停止条件的递归函数何时最终停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6887363/

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