Рекурсивное вычисление факториала на Си

Рассмотрим вычисление факториала с помощью рекурсивной функции.

Факториал вычисляется по следующей формуле: Формула факториала - vscode.ru

Для его нахождения будем использовать рекурсивную функцию. Рекурсивная функция – это функция, которая вызывает сама себя.

Начнем писать программу. Подключим необходимые библиотеки и напишем рекурсивную функцию factorial(n):

Разберем функцию подробнее. Будем работать с типом данных long int – это длинный целый тип. Для нашей программы этот тип подходит лучше всего, потому что факториал – чрезвычайно быстрорастущая функция. Условие if (строка 6) – условие остановки рекурсии.

Рассмотрим пример. Допустим необходимо вычислить факториал пяти (n=5). Вызываем функцию factorial(5), условие остановки не срабатывает, переходим к оператору return (строка 7). Умножаем n на то, что вернет функция factorial(n – 1), вычисляем эту функцию: в нее мы передаем число 4 (5-1=4). То есть мы спускаемся на уровень ниже. И так мы будем спускаться вниз да тех пор, пока n не станет равным единице или нулю, тогда сработает условие остановки рекурсии. Функция вернет 1. Единица будет умножена на n (=2), и так, по уровням, будем подниматься наверх, умножая на текущее для конкретного уровня число n то, что вернет функция с уровня, который ниже. В результате мы получим значение факториала.

Примечание. Факториал нуля равен единице (0!=1).

Теперь напишем функцию main():

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

Демонстрация работы программы представлена на рисунке:

Рекурсивное вычисление факториала - vscode.ru

Чтобы скачать исходник программы, написанной в этой статье, нажмите на кнопку ниже:

Скачать исходник

 

Рекурсивное вычисление факториала на Си
5 (100%) 4 votes

Поделиться в соц. сетях:

2 комментария(ев) к статье “Рекурсивное вычисление факториала на Си

  1. Аааа

    Почему программа правильно вычисляет до 16! , а с 17! в ответе отрицательное значение?

    1. admin Автор статьи

      Факториал – очень быстрорастущая функция. Значит на 17! используемый тип данных переполняется.

Добавить комментарий для Аааа Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">