Программа для решения факториала на C++

n! Факториал

n! Факториал

Написать программу на C++ для вычисления(нахождения или решения) факториала — это очень популярное задание в сборниках по обучению программированию. Решение этой задачи и многих других размещено в разделе с решениями задач по программированию на C++. В данной статье мы разберем как реализовать решение на языке программирования C++.

 

Для начала — что такое факториал?

Факториалэто произведение всех натуральных чисел от 1 до N включительно. То есть, если N = 5, то значение факториала

F = 1*2*3*4*5 = 120.

Решить данную задачу можно несколькими способами, мы рассмотрим рекурсивное вычисление факториала и циклическое.

До начала вычислений необходимо узнать N. N может быть больше или равно единице (N>=0). Поэтому для начала напишем каркас приложения,  которое будет получать значение N и проверять его. Если N не соответствует, то программа выдаст ошибку «Error: N < 0.«. Листинг программы следующий:

Проверим ее.

Компилируем, запускаем и вводим любую N, которая меньше 0.

Значение N = -5

Значение N = -5

Получили ошибку, программа сообщила, что N < 0.

Запускаем и вводим любую N, которая больше или равно 0.

Значение N = 5

Значение N = 5

Программа ничего не вывела после, значит выполнился участок кода, где написано «Здесь будет код…«.

Теперь нам достаточно вставить в место, где написано «Здесь будет код…» нужную реализацию алгоритма по нахождению факториала.

Нахождение факториала с помощью цикла

Для нахождения факториала напишем свою функцию, которая будет принимать значение N и возвращать результат.

Реализовать алгоритм нахождения факториала очень просто:

Что делает функция? Принимает значение N, после чего определяется переменная F, она будет хранить в себе ответ. Запускается цикл for от 1 до N, то есть переменная i будет иметь значения от 1 до N, эти значения мы используем для перемножения переменной F.

Для N=0 значение факториала равно 1. Цикл не будет вообще выполняться, т.к. i должна быть меньшей или равной N, в данном случае первое значение i=1, а N=0. Функция просто возвратит F, которая равно 1.

Для N=1 значение факториала равно 1. Цикл выполнится 1 раз, произойдет умножение F на i, а так как первое значение i = 1, то F так и останется равна 1.

Для остальных значений N цикл будет выполняться N раз, с каждой итерацией i будет увеличиваться на 1 и умножать на себя F.

(F = F*i).

Вставляем функцию в нашу программу:

Теперь проверим работу программы, для этого скомпилируем, запустим  и попробуем ввести различные значения.

Пусть найдет факториал от 0

Факториал от 0

Факториал от 0

Получили значение 1. Мы знаем, что факториал от 0 равен единице, здесь программа работает верно.

Пусть найдет факториал от 1

Факториал от 1

Факториал от 1

Получили значение 1. Мы знаем, что факториал от 1 равен единице, здесь программа тоже работает верно.

Пусть найдет факториал от 5

Факториал от 5

Факториал от 5

Получили значение 120. Проверим: F = 1*2*3*4*5 = 120. Программа верно вычислила факториал.

Рекурсивное нахождение факториала

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

Наша функция factorial() будет принимать значение N и возвращать N*factorial(N-1). То есть будет возвращать значение N умноженное на саму себя, но только с N-1.

Код реализации рекурсивной функции нахождения факториала

Как это работает?

Допустим, N = 3. Мы передаем значение функции factorial(3), а она возвращает значение 3 * factorial(2), в свою очередь factorial(2) возвращает 2 * factorial(1), а factorial(1) возвращает 1. И теперь мы идем в обратном порядке:

factorial(1) = 1;

factorial(2) = 2 * factorial(1) = 2 * 1 = 2;

factorial(3) = 3 * factorial(2) = 3 * 2 = 6;

Вызванная функция factorial(3) возвратит нам 6.

А factorial(0) и factorial(1) сразу вернут 1.

Вставим рекурсивную функцию в программу для нахождения факториала:

Компилируем, запускаем и проверяем.

Значение факториала для 0

Факториал от 0

Факториал от 0

Вывела 1, а мы знаем, что факториал от 0 равен 1. Значит работает верно.

Значение факториала для 1

Факториал от 1

Факториал от 1

Вывела 1, а мы знаем, что факториал от 1 равен 1. Значит работает верно.

Значение факториала для 5

Факториал от 5

Факториал от 5

Получили значение 120. Проверим:

F = 1*2*3*4*5 = 120.

Программа верно вычислила факториал.

Послесловие

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

Программа для решения факториала на C++: 1 комментарий

  1. Оксана

    Очень полезная статья, сразу все стало понятно))Спасибо!

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

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