Шаг 11.
Основы JavaScript.
Правила передачи аргументов функции. Рекурсия

    На этом шаге мы рассмотрим правила передачи аргументов в функцию и рекурсивные функции.

    В JavaScript действуют следующие правила передачи аргументов функции:

    Важной особенностью языка JavaScript является то, что функция может вызывать не только другие функции, но и сама себя. Такие функции называются рекурсивными. Во многих случаях использование рекурсии позволяет писать краткий код вместо сложных вложенных циклов. Следует, однако, учитывать, что рекурсия работает медленнее, чем обычный цикл, и пользоваться ей только в тех случаях, когда это действительно оправдано.

    Приведем пример функции, вычисляющей факториал числа (факториал числа n равен 1 * 2 * ... * n):

<HTML>
<HEAD>
<TITLE>Рекурсивные функции</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function factorial (n) 
{
  return (n<=1)?1:n * factorial(n-1);
}
var x = 5;
var y = factorial (x);
alert ("Факториал числа "+x+" равен "+y);
//-->
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
Текст этого документа можно взять здесь.

    Результат работы скрипта приведен на рисунке 1.


Рис.1. Использование рекурсивной функции

    Неаккуратно написанная рекурсивная функция может войти в бесконечный цикл и никогда не вернуть результата. Поэтому при использовании рекурсии всегда нужно предусмотреть точку выхода из рекурсии. Такой точкой выхода является здесь проверка условия n<=1. Как только это условие будет выполнено, функция вернет значение 1, а до этого момента значение функции будет равно n*factorial(n-1):

5 * factorial (4);
5 * 4 * factorial (3);
5 * 4 * 3 * factorial (2);
.   .   .   .   .
5 * 4 * 3 * 2 * 1. //"Сработало" условие выхода.

    На следующем шаге мы рассмотрим вопросы, связанные с областью видимости переменных.




Предыдущий шаг Содержание Следующий шаг