Факторіал числа

Факторіал числа n – це функція, яка повертає добуток всіх натуральних чисел від 1 до n включно.

Для позначення факторіала використовується знак оклику – “!”.
n! = 1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ … ⋅ n
Факторіал нуля 0! = 1

Програма для рекурсивного обчислення факторіала

Якщо подивитись на формулу n! = 1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ … ⋅ n з кінця, то можна побачити, що факторіал числа n рівнийn! = (n - 1)! ⋅ n. Записавши цей вираз у вигляді функції отримаємо – f(n) = f(n-1) ⋅ n.

Код програми:

{$CODEPAGE UTF8}
program FactorialCalc;
var
  result : QWord;
  x : integer;

function Factorial(n : integer) : QWord;
begin
  if (n = 0) or (n = 1) then
    Factorial := 1
  else
    Factorial := Factorial(n - 1) * n;
end;

begin
  writeln('Рекурсивне обчислення факторіала');
  write('x = ');
  readln(x);
  result := Factorial(x);
  writeln(x, '!', ' = ', result);
  readln;
end.

В програмі використовується тип QWord (беззнакове 64-бітне число) для отримання найбільшого результату. Використовуючи цей тип даних, можна знайти факторіал числа до 20, якщо число більше двадцяти, то результат буде з помилкою.
Якщо цей тип даних не підтримується вашим компілятором, ви можете замінити QWord на будь-який інший цілочисельний тип (наприклад integer).

Програма для ітеративного обчислення факторіалу

{$CODEPAGE UTF8}
program Factorial;
var
  k, res : QWord;

function Fact(n : integer) : QWord;
var
  i : integer;
begin
  Fact := 1;
  if n > 0 then
    for i := 1 to n do
      Fact := Fact * i;
end;

begin
  writeln('Обчислення факторіалу');
  write('Введіть ціле число від 0 до 20 ');
  readln(k);
  res := Fact(k);
  writeln(k, '!', ' = ', res);
  readln;
end. 

Дивіться також: