Максимальная глубина рекурсивного вызова

Способ пощупать наживую глубину рекурсии, которую поддерживают js движки. По достижению максимальной глубины вложенности вызовов функций интерпретатор генерирует исключение. Значит для замера максимальной глубины достаточно инкрементировать значение счетчика, до тех пор, пока не вывалится ошибка.

var max_depth;

max_depth = 0;
function recursive () {
	max_depth += 1;
	recursive();
}
try {
	recursive()
} finally {
	alert('Max recursion depth is ' + max_depth);
}

Визуализация
Browser call stack limits

Сырые данные

Safari 6.02 43680
Chrome 23 (mac) 24544
Chrome 23 (win) 25021
Opera 12.10 16384
Firefox Aurora 19.0a2 31712
Internet explorer 41153
nodejs 25113

Все браузеры, кроме firefox-а давали ответ практически моментально. А лисица висела минуты 3-4, прежде чем назвать свою цифру.

Из интересных выводов: если при использовании рекурсивных вызовов, можно получить неприятный сюрприз в случаях, близких к граничным. Разработчик, бди.

Share
Send
1 comment
Дмитрий Сидоренко

На сколько я помню, в nodejs максимальный размер стека настраивается. Флаг “--max-stack-size”, если мне не изменяет память

Popular