Факториалом числа N называют произведение всех натуральных чисел от 1 до N (включительно). Записывается так: N! Факториал 0 равен 1 - 0!=1 Факториалы отрицательных или действительных чисел не существует (ну или не используются). Внимание: факториалы чисел очень быстро растут в значениях, при росте N, и даже при относительно небольших N 100 уже будут иметь огромные числовые значения. Так факториал 20 - 20!=2432902008176640000 А факториал 100 будет уже из 158 цифр !!!
Для чего нужен факториал? Довольно часто в некоторых математических формулах вычисление значений определённых функций сводятся к последовательному произведению определённых выражений, причём тем более точно вычисляется функция, чем длиннее последовательность этих выражений. В таких уравнениях из выражений можно вычленить часть, которая является факториалом числа, и, найдя его заранее, можно упростить решение. Бывают и более сложные функции того-же строения, у которых факториалы присутствуют в каждом члене. Вот например: sin(x)=x-(x 3/3!)+(x 5/5!)-(x 7/7!). . . Чем дальше выполнять вычисления, тем большей точности мы добьёмся при вычислении значения синуса угла X.
Теперь о методах вычисления факториала. Простейшим методом, который наверно знают даже школьники, является простая рекурсивная функция: function Factorial(n: word): Long. Int; begin if n=0 then Factorial : = 1 else Factorial : = n*Factorial(n-1); end; Однако любой хоть немного уважающий себя программист никогда так не напишет. У этого метода есть как минимум два серьезных недостатка: во первых для вычисления факториала такая рекурсивная функция "съедает" очень большой кусок стековой памяти, что может привести к переполнению стека (особенно в сложных программах со множеством вызовов вложенных процедур или других рекурсивных алгоритмов). Вторым недостатком является довольно медленная скорость выполнения данного метода, так как вызов функции требует времени, которое можно было бы не тратить.
Гораздо более предпочтительным является другой школьный вариант, который может показаться очень банальным, однако я бы как раз назвал его наиболее используемым: function Factorial(n: word): Long. Int; var fact: longint; begin fact : = 1; if n=0 then exit; for n : = 1 to n do fact : = fact*n; Factorial : = fact; end; Такой метод будет работать куда быстрее, и куда надёжнее. Однако есть другой очевидный недостаток - факториал не будет работать для чисел, больших чем 12, потому что результат даст переполнение. Однако на практике довольно редко встречаются случаи, когда нужны факториалы большей величины. Если же вам нужны факториалы больших чисел, то вычислять их значение можно только в строки, либо в массивы чисел, поскольку нет таких типов численных переменных, которые могли бы вместить скажем значение 2000!
СПАСИБО ЗА ВНИМАНИЕ Автор: Легостаева Марина группа 9. 1