自递归函数限制

Nic*_*ull 0 c# recursion

抱歉,如果这是错误的站点,但让我们想象一个函数 (C#):

public int Increment(int i)
{
    int j = i;
    if (j++ < Math.Pow(10, 12)) j = Increment(j);

    return j;
}
Run Code Online (Sandbox Code Playgroud)

这个函数没什么用,只是一个例子。我可以想象,自递归“循环”的最终递归返回值将通过每个递归函数将结果传递回,将每个方法返回到前一个递归,然后最终返回到初始函数调用,返回到调用者功能。

我的问题是我们可以有多少次递归,是什么导致了这个限制?谢谢。

Tim*_* S. 5

接近10万。但是,如果您有达到该限制的危险,则应该重新设计代码以删除递归。

另外,我想我注意到int.MaxValue大约是 2.1*10^9 (21 亿),小于 10^12,所以(即使不考虑递归限制)你的函数永远不会返回。当您尝试从 递增时j == int.MaxValue,您将抛出异常(如果您处于检查环境中)或循环回j == int.MinValue(如果未检查)。