Показать сообщение отдельно
  #1 (permalink)  
Старый 21.07.2012, 18:09
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Косвенная рекурсия в Javascript
Пытаюсь разобраться в рекурсии. Почему когда я пишу так:
<script type="text/javascript">
function recursMe(param) {
     if (param < 0) {   //base case
          return -1;
     }
     else {

          //some code here
          recursMe(param);
     }
}
recursMe(10);

	</script>

или так (используя косвенную рекурсию):
<script type="text/javascript">
function recursMe(param) {
     if (param < 0) {   //base case
          return -1;
     }
     else {

          //some code here
          //recursMe(param);
		recursMe2(param);
     }
}
function recursMe2(param)
{
	 recursMe(param);
}
recursMe(10);

	</script>

во всех браузерах я имею ошибку примерно такого характера:
Хром: Uncaught RangeError: Maximum call stack size exceeded
ie: Stack overflow at line:135


Когда я делаю косвенную рекурсию через setTimeout() так:
<script type="text/javascript">
function recursMe(param) {
     if (param < 0) {   //base case
          return -1;
     }
     else {

          //some code here
          setTimeout("recursMe(" + param + ")", 1);
     }
}
recursMe(10);

	</script>

браузеры не выдают ошибку, хотя происходит та же ситуация: функция recursMe() вызывается много раз подряд. Почему так происходит?
Ответить с цитированием