Функции в С++ для начинающих. Рекурсия. Вычисление факториала числа с помощью рекурсии

Один из стандартных примеров — пример рекурсивного вычисления факториала. Мне этот пример мало нравится, но коли его так любят давать, то пусть будет и на моём сайте.
К сведению:

  • Факториал числа — это произведение всех натуральных чисел от 1 до n включительно.
Пример кода:

Внутри функции factorial происходит основное вычисление. При этом внутренность функции делится на две части: проверка на необходимость прекращения и на запуск нового экземпляра функции, провоцирующего вычисление. При этом смешивается вычисляемое функцией число, на основе отданного в функцию аргумента, и значение параметра функции: вы видите формулу factorial(value — 1) * value, в которой вычисляемое дополнительной функцией factorial число factorial(value — 1) умножается на значение параметра текущей функции: value. Эта смесь может немного путать, но её несложно научиться различать. Если происходит вызов функции, то, получается, значение вычисляется функцией, а если мы задействуем просто значение параметра, то оно и есть значение, пришедшее в параметр текущей функции.
Вычисление факториала для первых нескольких чисел:
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
  • Рекурсия имеет много недостатков. Она многократно активирует механизм вызовов — отсюда рост "накладных расходов". Они могут оказаться слишком расточительными как в плане процессорного времени, так и в плане объема памяти. Каждый рекурсивный вызов приводит к созданию нового экземпляра функции (на самом деле создаются только новые экземпляры её переменных). На это может расходоваться значительная память.
  • Любую задачу, которая может быть решена рекурсивно, можно решить и итеративно (нерекурсивно). Обычно рекурсивный подход предпочитают итеративному, если он более естественно отражает задачу и дает в результате программу, которую проще понять и отладить. Другая причина выбора рекурсивного решения может состоять в том, что итеративное решение оказывается неочевидным.
  • Избегайте использования рекурсии в случаях, требующих высокой эффективности. Рекурсивные вызовы требуют времени и дополнительных затрат памяти.
Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

Один комментарий: Функции в С++ для начинающих. Рекурсия. Вычисление факториала числа с помощью рекурсии

  • ww говорит:

    Неточности во втором листинге.
    в прототипе функции д.б. переменная задана со строчной (int n)
    условие д.б. в скобках if (n<2)
    отсутствует закрывающая фигурная скобка у функции main }

    Автор сайта отвечает:
    исправил. спасибо

    и в теле рекурсивной функции else return n*fact(n-1) д.б. точка с запятой, спасибо.




    0



    0

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     

Случайная книга в электронном формате

Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

В обед, шеф заходит в бухгалтерию. На столах лежат "мыши" на спине. Спрашивает: - В чём дело? - Чтобы компьютеры не тормозили, сисадмин рекомендовал класть "мышек" на спину, для отдыха в нерабочее время.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок