自递归函数限制

时间:2014-04-17 11:54:37

标签: c# recursion

对不起,如果这是一个错误的网站,但让我们设想一个函数(C#):

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

    return j;
}

这个功能很无用,但它只是一个例子。我想,自递归“循环”的最终递归返回值会将结果传递回每个递归函数,将每个方法返回到前一个递归,最后返回初始函数调用,返回给调用者功能。

我的问题是我们可以进行多少次递归,以及导致这种限制的原因是什么?感谢。

1 个答案:

答案 0 :(得分:2)

Close to 100,000.但是,如果您有可能达到该限制,则应重新设计代码以删除递归。

此外,我还记得int.MaxValue约为2.1 * 10 ^ 9(21亿),小于10 ^ 12,所以(即使忽略递归限制)你的函数永远不会返回。当您尝试从j == int.MaxValue增加时,您将要么抛出异常(如果您处于checked环境中),要么循环回j == int.MinValue(如果未选中)