В целях оценки максимальной глубины вызова, которую может достичь рекурсивный метод с заданным объемом памяти, какова (приблизительная) формула для вычисления памяти, используемой до ошибки, вероятно, произойдет?
Edit:
Многие ответили "это зависит", что разумно, поэтому позвольте удалить некоторые переменные, используя тривиальный, но конкретный пример:
public static int sumOneToN(int n) {
return n < 2 ? 1 : n + sumOneToN(n - 1);
}
Легко показать, что запуск этого в моей Eclipse IDE взрывается для n
чуть меньше 1000 (удивительно низкий для меня).
Возможно ли, что этот предел глубины вызова был оценен без его выполнения?
Изменить: я не могу не думать о том, что Eclipse имеет фиксированную максимальную глубину вызова 1000, потому что я дошел до 998
, но там один для основного и один для начального вызова метода, делая 1000
во всех. Это "слишком круто" число ИМХО, чтобы быть совпадением. Я буду исследовать дальше. У меня только Dux накладные расходы -Xss vm параметр; это максимальный размер стека, поэтому бегун Eclipse должен иметь -Xss1000
установить где-нибудь