The factorial function can also be extended to non-integer arguments while retaining its most important properties; this involves more advanced mathematics, notably techniques from mathematical analysis.
Factorials were used to count permutations at least as early as the 12th century, by Indian scholars. In 1677, Fabian Stedman described factorials as applied to change ringing, a musical art involving the ringing of many tuned bells. After describing a recursive approach, Stedman gives a statement of a factorial (using the language of the original):
Now the nature of these methods is such, that the changes on one number comprehends [includes] the changes on all lesser numbers ... insomuch that a compleat Peal of changes on one number seemeth to be formed by uniting of the compleat Peals on all lesser numbers into one entire body.
There are several motivations for this definition:
For n = 0, the definition of n! as a product involves the product of no numbers at all, and so is an example of the broader convention that the product of no factors is equal to the multiplicative identity (see empty product).
There is exactly one permutation of zero objects (with nothing to permute, the only rearrangement is to do nothing).
Although the factorial function has its roots in combinatorics, formulas involving factorials occur in many areas of mathematics.
There are n! different ways of arranging n distinct objects into a sequence, the permutations of those objects.
Often factorials appear in the denominator of a formula to account for the fact that ordering is to be ignored. A classical example is counting k-combinations (subsets of k elements) from a set with n elements. One can obtain such a combination by choosing a k-permutation: successively selecting and removing one element of the set, k times, for a total of
possibilities. This however produces the k-combinations in a particular order that one wishes to ignore; since each k-combination is obtained in k! different ways, the correct number of k-combinations is
Factorials also turn up in calculus; for example, they occur in the denominators of the terms of Taylor's formula, where they are used as compensation terms due to the nth derivative of xn being equivalent to n!.
The graph of the function f(n) = ln n! is shown in the figure on the right. It looks approximately linear for all reasonable values of n, but this intuition is false. We get one of the simplest approximations for ln n! by bounding the sum with an integral from above and below as follows:
Both this and Stirling's approximation give a relative error on the order of 1/n3, but Ramanujan's is about four times more accurate. However, if we use two correction terms in a Sitrling-type approximation, as with Ramanujan's approximation, the relative error will be of order 1/n5:
If efficiency is not a concern, computing factorials is trivial from an algorithmic point of view: successively multiplying a variable initialized to 1 by the integers up to n (if any) will compute n!, provided the result fits in the variable. In functional languages, the recursive definition is often implemented directly to illustrate recursive functions.
The main practical difficulty in computing factorials is the size of the result. To assure that the exact result will fit for all legal values of even the smallest commonly used integral type (8-bit signed integers) would require more than 700 bits, so no reasonable specification of a factorial function using fixed-size types can avoid questions of overflow. The values 12! and 20! are the largest factorials that can be stored in, respectively, the 32-bit and 64-bit integers commonly used in personal computers, however many languages support variable length integer types capable of calculating very large values.Floating-point representation of an approximated result allows going a bit further, but this also remains quite limited by possible overflow. Most calculators use scientific notation with 2-digit decimal exponents, and the largest factorial that fits is then 69!, because 69! < 10100 < 70!. Other implementations (such as computer software such as spreadsheet programs) can often handle larger values.
If the exact values of large factorials are needed, they can be computed using arbitrary-precision arithmetic. Instead of doing the sequential multiplications ((1 × 2) × 3) × 4..., a program can partition the sequence into two parts, whose products are roughly the same size, and multiply them using a divide-and-conquer method. This is often more efficient.
The asymptotically best efficiency is obtained by computing n! from its prime factorization. As documented by Peter Borwein, prime factorization allows n! to be computed in time O(n(log n log log n)2), provided that a fast multiplication algorithm is used (for example, the Schönhage–Strassen algorithm). Peter Luschny presents source code and benchmarks for several efficient factorial algorithms, with or without the use of a prime sieve.
Legendre's formula gives the multiplicity of the prime p occurring in the prime factorization of n! as
where sp(n) denotes the sum of the standard base-p digits of n.
Adding 1 to a factorial n! yields a number that is divisible by a prime larger than n. This fact can be used to prove Euclid's theorem that the number of primes is infinite. Primes of the form n! ± 1 are called factorial primes.
Besides nonnegative integers, the factorial can also be defined for non-integer values, but this requires more advanced tools from mathematical analysis.
One function that fills in the values of the factorial (but with a shift of 1 in the argument), that is often used, is called the gamma function, denoted Γ(z). It is defined for all complex numbers z except for the non-positive integers, and given when the real part of z is positive by
Its relation to the factorial is that for any natural number n
Euler's original formula for the gamma function was
Another function that also fills the values of the factorial (but with no shift in the argument), originally introduced by Carl Friedrich Gauss, that is sometimes used, is called the pi function, denoted Π(z) for real numbers z ≥ 0. It is defined by
In terms of the gamma function, the pi function is
The factorial function, generalized to all real numbers except negative integers. For example, 0! = 1! = 1, (−1/2)! = √π, 1/2! = √π/2.
The pi function properly extends the factorial in that
In addition to this, the pi function satisfies the same recurrence as factorials do, but at every complex value z where it is defined
In fact, this is no longer a recurrence relation but a functional equation. Expressed in terms of the gamma function this functional equation takes the form
Since the factorial is extended by the pi function, for every complex value z where it is defined, we can write:
The values of these functions at half-integer values is therefore determined by a single one of them; one has
from which it follows that for n ∈ N,
It also follows that for n ∈ N,
The pi function is certainly not the only way to extend factorials to a function defined at almost all complex values, and not even the only one that is analytic wherever it is defined. Nonetheless it is usually considered the most natural way to extend the values of the factorials to a complex function. For instance, the Bohr–Mollerup theorem states that the gamma function is the only function that takes the value 1 at 1, satisfies the functional equation Γ(n + 1) = nΓ(n), is meromorphic on the complex numbers, and is log-convex on the positive real axis. A similar statement holds for the pi function as well, using the Π(n) = nΠ(n − 1) functional equation.
Amplitude and phase of factorial of complex argument
Representation through the gamma function allows evaluation of factorial of complex argument. Equilines of amplitude and phase of factorial are shown in figure. Let
Several levels of constant modulus (amplitude) ρ and constant phase φ are shown. The grid covers the range −3 ≤ x ≤ 3, −2 ≤ y ≤ 2, with unit steps. The scratched line shows the level φ = ±π.
Thin lines show intermediate levels of constant modulus and constant phase. At the poles at every negative integer, phase and amplitude are not defined. Equilines are dense in vicinity of singularities along negative integer values of the argument.
There is a misconception that ln z! = P(z) or ln Γ(z + 1) = P(z) for any complex z ≠ 0. Indeed, the relation through the logarithm is valid only for a specific range of values of z in the vicinity of the real axis, where −π < Im(Γ(z + 1)) < π. The larger the real part of the argument, the smaller the imaginary part should be. However, the inverse relation, z! = eP(z), is valid for the whole complex plane apart from z = 0. The convergence is poor in the vicinity of the negative part of the real axis; it is difficult to have good convergence of any approximation in the vicinity of the singularities. When |Im z| > 2 or Re z > 2, the six coefficients above are sufficient for the evaluation of the factorial with complex double precision. For higher precision more coefficients can be computed by a rational QD scheme (Rutishauser's QD algorithm).
Non-extendability to negative integers
The relation n! = n × (n − 1)! allows one to compute the factorial for an integer given the factorial for a smaller integer. The relation can be inverted so that one can compute the factorial for an integer given the factorial for a larger integer:
Note, however, that this recursion does not permit us to compute the factorial of a negative integer; use of the formula to compute (−1)! would require a division by zero, and thus blocks us from computing a factorial value for every negative integer. Similarly, the gamma function is not defined for zero or negative integers, though it is defined for all other complex numbers.
Factorial-like products and functions
There are several other integer sequences similar to the factorial that are used in mathematics:
A common related notation is to use multiple exclamation points to denote a multifactorial, the product of integers in steps of two (n!!), three (n!!!), or more (see generalizations of the double factorial). The double factorial is the most commonly used variant, but one can similarly define the triple factorial (n!!!) and so on. One can define the k-tuple factorial, denoted by n!(k), recursively for positive integers as
In addition, similarly to 0! = 1!/1 = 1, one can define:
For sufficiently large n ≥ 1, the ordinary single factorial function is expanded through the multifactorial functions as follows:
In the same way that n! is not defined for negative integers, and n!! is not defined for negative even integers, n!(k) is not defined for negative integers divisible by k.
Occasionally the hyperfactorial of n is considered. It is written as H(n) and defined by
For n = 1, 2, 3, 4,... the values of H(n) are 1, 4, 108, 7004276480000000000♠27648,... (sequence A002109 in the OEIS).
The asymptotic growth rate is
where A = 1.2824... is the Glaisher–Kinkelin constant.H(14) ≈ 7099184740000000000♠1.8474×1099 is already almost equal to a googol, and H(15) ≈ 7116808960000000000♠8.0896×10116 is almost of the same magnitude as the Shannon number, the theoretical number of possible chess games. Compared to the Pickover definition of the superfactorial, the hyperfactorial grows relatively slowly.
The hyperfactorial function can be generalized to complex numbers in a similar way as the factorial function. The resulting function is called the K-function.
Higgins, Peter (2008), Number Story: From Counting to Cryptography, New York: Copernicus, ISBN978-1-84800-000-1
Stedman, Fabian (1677), Campanalogia, London The publisher is given as "W.S." who may have been William Smith, possibly acting as agent for the Society of College Youths, to which society the "Dedicatory" is addressed.