如何预测递归方法的最大调用深度?
为了估计递归方法在给定内存量下可能达到的最大调用深度,在可能发生堆栈溢出错误之前计算所用内存的(近似)公式是什么?
编辑:
许多人用“它取决于”来回应,这是合理的,所以让我们通过使用一个简单但具体的例子来删除一些变量:
public static int sumOneToN(int n) {
return n < 2 ? 1 : n + sumOneToN(n - 1);
}
很容易证明在我的Eclipse IDE中运行它爆炸不到1000(对我来说低得惊人)。是否可以在不执行此调用深度限制的情况下估计它?n
编辑:我不禁认为Eclipse有一个固定的最大调用深度1000,因为我得到了,但是有一个用于主调用,一个用于对方法的初始调用,总共进行。恕我直言,这个数字“太圆”了,不是巧合。我将进一步调查。我只是Dux开销-Xss vm参数;这是最大堆栈大小,因此 Eclipse 运行器必须设置在某个位置998
1000
-Xss1000