понедельник, 15 января 2018 г.

30 Days of Code. Day 9: Recursion



Dashboard > Tutorials > 30 Days of CodeDay


function factorial(n) {
    let res;
    if (n === 1) {
        return 1;
    }
    res = factorial(n - 1) * n;
    return res;
}

Теория
 

Рекурсия с одиночным рекурсивным вызовом

Если рекурсивная функция вызывает саму себя, затем этот новый вызов снова вызывает себя и так далее, то получится бесконечная последовательность вызовов, если только код не включает в себе нечто, что позволит прервать эту цепочку вызовов. Обычный метод состоит в том, что рекурсивный вызов заключают в оператор if. Например, рекурсивная функция типа void по имени recurs() может иметь следующую форму:

void recurs (списокАргументов)
{
операторы
if (проверка)
recurs (аргументы)
операторы2
}

В какой-то ситуации проверка возвращает false, и цепочка вызовов прекращается.
Рекурсивные вызовы порождают замечательную цепочку событий. До тех пор, пока условие оператора if остается истинным, каждый вызов recurs () выполняет операторы и затем вызывает новое воплощение recurs(), не достигая конструкции операторы2. Когда условие оператора if возвращает false, текущий вызов переходит к операторы2. Затем, когда текущий вызов завершается, управление возвращается предыдущему экземпляру recurs (), который вызвал его. Затем этот экземпляр исполняет свой раздел операторы2 и прекращается, возвращая управление предшествующему вызову, и так далее. Таким образом, если происходит пять вложенных вызовов recurs (), то первый раздел операторы выполняется пять раз в том порядке, в котором произошли вызовы, а потом пять раз в обратном порядке выполняется раздел операторы2. После входа в пять уровней рекурсии затем программа должна пройти обратно эти же пять уровней.




Комментариев нет:

Отправка комментария

The Love-Letter Mystery

/* Джеймс раздобыл любовное письмо, которое его друг Гарри написал своей девушке. Будучи шутником, Джеймс решил изменить его. Он ...