Jon*_*eet 32
你可以多少次递归取决于:
Guid局部变量的方法将比不具有任何局部变量的方法占用更多堆栈)如何避免堆栈溢出?不要过分递归:)如果你不能合理地确定你的递归会在没有走得很远的情况下终止(我会担心"超过10"虽然这是非常安全的)然后重写它以避免递归.
这实际上取决于你正在使用的递归算法.如果它是简单的递归,你可以这样做:
public int CalculateSomethingRecursively(int someNumber)
{
return doSomethingRecursively(someNumber, 0);
}
private int doSomethingRecursively(int someNumber, int level)
{
if (level >= MAX_LEVEL || !shouldKeepCalculating(someNumber))
return someNumber;
return doSomethingRecursively(someNumber, level + 1);
}
Run Code Online (Sandbox Code Playgroud)
值得注意的是,这种方法仅在将递归级别定义为逻辑限制时才有用.如果不能发生这种情况(例如分而治之算法),则必须决定如何平衡简单性与性能与资源限制之间的关系.在这些情况下,一旦达到arbritrary预定义的限制,您可能必须在方法之间切换.我在快速排序算法中使用的有效方法是将其作为列表总大小的比例.在这种情况下,逻辑限制是条件不再是最佳时的结果.