![]() |
||
|
aranea.ru || JavaScript - Введение | Рекурсия
РекурсияРекурсия – это важная техника программирования. Этот метод состоит в том, что функция вызывает сама себя изнутри. Очень удобный пример рекурсии - расчет факториала. Факториал от 0 и 1 определяются, как 1. Факториал больших чисел рассчитывается умножением 1 * 2 * ... и т.д. с инкрементом 1 до достижения числа, для которого осуществляется подсчет. Следующий параграф описывает функцию, которая подсчитывает факториал. "Если число меньше, чем ноль, то отбрасываем его. Если число не целое, округлить его до следующего целого числа. Если число равно нулю или единице, то его факториал равен 1. Если число больше единицы, то вычислить факториал". Для расчета факториала любого числа, больше 1, вам необходимо подсчитать факториал другого меньшего числа. Функция, которую вы используете для этого, - это функция, в середине которой вы уже находитесь; функция должна вызывать себя для следующего числа, перед тем как она выполнит расчет. Это пример рекурсии. Ясно, что здесь могут возникнуть проблемы. Вы можете легко создать рекурсивную функцию, которая не получает определенного результата, и не может достичь конца. Такая рекурсия приводит к тому, что компьютер выполняет "бесконечный" цикл. Пример такой ситуации: опустите первое правило (для отрицательных чисел) в вышеуказанном описании расчета факториала, и попытайтесь рассчитать факториал для любого отрицательного числа. Это приводит к ошибке, так как для расчета факториала, скажем -24, вы сначала должны подсчитать факториал для -25; но чтобы сделать это, вам нужно подсчитать факториал для -26; и т.д. Очевидно, что этот процесс никогда не остановится. Поэтому, очень важно разрабатывать рекурсивную функцию с большой осторожностью. Если вы даже подозреваете, что есть другая возможность для бесконечной рекурсии, то вы можете создать функцию, подсчитывающую, сколько раз она вызывает сама себя. Если функция вызывает себя слишком много раз, то вы решаете, что ей следует завершаться автоматически. Здесь приводится функция для расчета факториала, на этот раз она написана в JavaScript. function factorial(aNumber) { aNumber = Math.floor(aNumber); // Если число не целое, то округлите его. if (aNumber < 0) { // Если число меньше нуля, отбросить его. return "not a defined quantity"; } if ((anumber == 0) || (anumber == 1)) { // Если число - 0 или 1, то факториал - 1. return 1; } else return (anumber * factorial(anumber - 1)); // Иначе, повторять до завершения расчетов. } |