Перестановкой называется упорядоченная запись всех элементов конечного множества без повторений, когда фиксировано взаимное расположение элементов. Различные перестановки совпадают по составу и отличаются позициями своих элементов. Например, из множества трех латинских букв
{X, Y, Z} можно получить следующие
6 различных перестановок:
(XYZ); (YZX); (ZXY); (YXZ); (XZY); (ZYX).
В общем случае для множества из n элементов можно построить n! различных перестановок. При этом значение 0! принимается равным 1, а для любых целых положительных чисел n>0 величину n! можно вычислить по следующему рекуррентному соотношению:
n! = n(n−1)!
В следующем примере показано использование этого рекуррентного определения факториала для рекурсивного вычисления значения 4!:
4! = 4.3! = 4.3.2! = 4.3.2.1! = 4.3.2.1 = 24.
Менее известно следующее рекуррентное соотношение для факториалов, по которому можно рекурсивно вычислять их величины при любых значениях n>2:
n! = (n−1)[(n−1)! + (n−2)!].
Следующий пример показывает вычисление величины 4! по этой рекуррентной формуле, где учитываются очевидные значения 2!=2 и 1!=1:
4! = 3( 3! + 2! ) = 3( 2( 2! + 1! ) + 2! ) = 3( 3.2! + 2.1! ) = 24.
Чтобы определить значение n! по рассмотренным рекуррентным соотношениям, необходимо последовательно вычислить факториалы всех целых чисел от 1 до (n−1). Для непосредственной оценки значения n! без таких промежуточных умножений можно воспользоваться следующей приближенной формулой Стирлинга:
n! ~ (2πn)1/2(ne)n
Относительная ошибка вычисления значения n! по формуле Стирлинга равна приблизительно (1/12n). Например, точное значение 8! равно 40320, а вычисления по формуле Стирлинга дает приближенный результат 39902 с ошибкой около 1% (1/96):
40320 = 8! ~ (17π)1/2(8e)8 ~ 39902
Качество приближенного вычисления значения факториала можно еще больше увеличить, если использовать следующий уточненный вариант формулы Стирлинга:
n! ~ (2πn)1/2(ne)n(1+ 112n)
Вычислительный эксперимент позволяет отметить быстрый рост значения n! с увеличением n. В частности, 10! превышает 3.5 миллиона (3628800), а 1000! представляет собой целое число с более чем 2500 десятичными знаками. Еще один интересный факт заключается в том, что число десятичных цифр в записи n! превышает n, начиная с n=25. В общем случае можно показать, что факториальная функция растет даже быстрее экспоненты. Справедливость такого вывода следует из следующего анализа выражения для квадрата факториальной функции:
(n!)2 = n∏k=1k(n - k + 1) ≥ n∏k=1n = nn
Сопоставление левой и правой частей в этом неравенстве дает следующее соотношение между факториальной функцией и экспонентой:
n! ≥ n(n/2)
Полученная оценка скорости возрастания факториальной функции имеет важное практическое значение, определяя вычислительную сложность прикладных комбинаторных задач, в которых требуется реализовать перебор перестановок различных элементов. Для практического решения таких задач было разработано большое число разнообразных комбинаторных алгоритмов систематического
перечисления перестановок в различном порядке. Наиболее известными из них являются различные варианты лексиграфических алгоритмов, алгоритм циклических сдвигов (вращения) перестановок, а также алгоритмы транспозиции смежных элементов. Особенности реализации этих перестановочных алгоритмов рассмотрены ниже.