JSCRIPT MANUAL

Microsoft® JScript™
Рекурсия
 Описание JScript
Пред.
След.


Рекурсия - важнейшая методика программирования. Она используется, чтобы иметь обращение к функции непосредственно изнутри себя. Наглядный пример - вычисление факториалов. Факториалы 0 и 1 оба определены заранее, оба равны 1. Факториалы больших чисел рассчитываются так: умножаются 1 * 2 * ..., увеличивая множитель на каждый цикл на единицу, пока не достигнет номера, для которого вычисляется факториал.

В данном параграфе опишем фукцию, вычисляющую факториал.

"Если число - меньше чем нуль, выход. Если это не целое число, округляем до меньшего целого числа. Если число - нуль или единица, факториал - 1. Если число больше единицы, умножаем его на факториал числа, меньшего на единицу".

Чтобы вычислить факториал любого числа, которое больше единицы, необходимо вычислить факториал по крайней мере одного другого числа. Функция, которую Вы используете, должна вызвать саму себя для вычисления факториала меньшего числа, до тех пор, пока факториал какого либо числа не будет вычислен. Это - пример рекурсии

Понятно, этот способ имеет недостатки. Вы можете легко создать рекурсивную функцию, которая никогда не примет конечный или определенный результат, и не достигнет конечной точки. Такая рекурсия заставляет компьютер выполнять так называемый "бесконечный" цикл. Пример: удалим первое правило (относительно вычисления факториала отрицательных чисел) из описания вычисления факториала, и попробуем вычислить факториал любого отрицательного числа. Эта попытка потерпит неудачу, потому что, чтобы вычислять факториал, скажем, -24 Вы сначала должны вычислить факториал -25; но чтобы делать это Вы сначала должны вычислить факториал -26; и так далее. Очевидно, что функция никогда не достигнет промежуточного определенного результата.

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

Ниже приведена функция, написанная на JScript.

function factorial(aNumber)  {
aNumber = Math.floor(aNumber);  // Если число не цело, "откинем" дробную часть.
if (aNumber < 0)  {  // Если число меньше нуля, выход. 
    return "Значение не определено.";
    }
      if ((anumber == 0) || (anumber == 1))  {  // Если число 0 или 1, факториал равен 1.
      return 1;
      }
        else return (anumber * factorial(anumber - 1));  // Вычисляем до выполнения
}


Перевод © 2000-2013 pauk R-T-F-M.info. Все права защищены.