For the purposes of estimating the maximum call depth a recursive method may achieve with a given amount of memory, what is the (approximate) formula for calculating the memory used before a stack overflow error is likely to occur?
Edit:
Many have responded with "it depends", which is reasonable, so let's remove some of the variables by using a trivial but concrete example:
public static int sumOneToN(int n) {
return n < 2 ? 1 : n + sumOneToN(n - 1);
}
It is easy to show that running this in my Eclipse IDE explodes for n
just under 1000 (surprisingly low to me).
Could this call depth limit have been estimated without executing it?
Edit: I can't help thinking that Eclipse has a fixed max call depth of 1000, because I got to 998
, but there's one for the main, and one for the initial call to the method, making 1000
in all. This is "too round" a number IMHO to be a coincidence. I'll investigate further. I have just Dux overhead the -Xss vm parameter; it's the maximum stack size, so Eclipse runner must have -Xss1000
set somewhere