Вычисление факториала на C++ можно провести с помощью циклов или рекурсии.
Стоит отметить, что так считают только факториалы небольших чисел. А для больших факториалов применяют более сложные подходы. Рассмотрим далее как расчёт факториалов с помощью циклов, так и с помощью рекурсии.
Вычисление факториала с помощью цикла for
Программа выглядит примерно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream.h> // подключаем cin/cout #include <conio.h> // подключаем getch int main() { int n; int i; int res; cin >> n; res = 1; for (i = 1; i <= n; i++) { res = res * i; } cout << res; getch(); } |
В этой программе вначале подключаются заголовочные файлы iostream.h и conio.h. Затем объявляются переменные:
- n - целое число, факториал, которого будет вычисляться;
- i - счётчик;
- res - переменная для хранения текущего результата.
Затем осуществляется ввод с помощью команды cin, это можно сделать и по-другому, например, с помощью scanf.
Далее текущему результату присваивается значение 1. И в цикле проводится n умножений.
После этого подсчитанный факториал выводится на экран с помощью команды cout. И ожидается нажатие пользователем клавиши (команда getch).
Вычисление факториала с помощью рекурсии
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream.h> // подключаем cin/cout #include <conio.h> // подключаем getch int factorial(int i) { if (i==0) return 1; else return i*factorial(i-1); } int main() { int n; int i; int res; cin >> n; cout << factorial(n); getch(); } |
Здесь всё аналогично предыдущему случаю за исключением цикла for, которого нет. Вместо него рекурсивная функция factorial.
Эта функция всякий раз вызывает сама себя, уменьшая значение i на 1. А когда i становится равным нулю, функция завершает вычисления (используется оператор if).
1!+3!+5!+...(2N-1). N=10
Найти сумму факториала
Например, так
#include <iostream.h> // подключаем cin/cout
#include <conio.h> // подключаем getch
int main()
{
int n;
int i, j;
long long res1, res2;
cin >> n;
res1 = 1;
res2 = 0;
for (i = 1; i <= 2 * n - 1; i = i + 2) {
res1 = 1;
for (j = 1; j <= i; j++) {
res1 = res1 * j;
}
res2 = res2 + res1;
}
cout << res2;
getch();
}
Объясните пожалуйста что такое res?
res - переменная для хранения текущего результата.
Но как посчитать большой факториал?
Например, 300!
А это точно нужно? Обычно начинающим такое не задают. Но там тоже не очень сложно. Можно использовать библиотеки для работы с большими целыми числами, например, FreeLIP. Бывают ещё задания, в которых достаточно вычислить приближённое значение факториала, воспользовавшись формулой Стирлинга
n! ≈ sqrt(2πn)(n/e)^n.
А можно как-то сделать с 1 циклом?
Можно, в самой первой программе на этой странице так и сделано.