階乗
数学において非負整数 の階乗（かいじょう、） は、1 から までのすべての整数の積である。例えば、
である。空積の規約のもと と定義する。
階乗は数学の様々な場面に出現するが、特に組合せ論、代数学、解析学などが著しい。階乗の最も基本的な出自は 個の相異なる対象を一列に並べる方法（対象の置換）の総数が 通りであるという事実である。この事実は少なくとも12世紀にはインドの学者によって知られていた。は1677年にへの応用として階乗を記述した。再帰的な手法による記述の後、Stedman は（独自の言葉を用いて）階乗に関しての記述を与えている:
感嘆符(!)を用いた、この "" という表記は1808年にによって発明された。
階乗の定義は、最も重要な性質を残したまま、非整数を引数とする函数に拡張することができる。そうすれば解析学における著しい手法などの進んだ数学を利用できるようになる。
いくつか同値な条件により定義することが可能である。
上記の何れの定義においても、
となることが織り込み済みである（最初の定義では「0 項の積は 1 と定める」という規約によって）。このように定義することの理由は:
など様々に挙げることができる。
より進んだ数学においては、引数が非整数の場合にも階乗函数を定義することができる（後述）。そういった一般化された定義のもとでの階乗は関数電卓や、Maple や Mathematica などの数学ソフトウェアで利用できる。
多くのプログラミング言語において、再帰的な定義を利用し、プロシージャの再帰呼び出しを用いた階乗の実装が可能である。
以下はC言語での例である。例示するコードではcodice_1型を使用しているが、codice_1型では小さな階乗でもオーバーフローしてしまうため、大きな階乗についてはcodice_3型のような浮動小数点数型を用いるなどの工夫が必要となる。
int factorial(int n)
階乗を含む公式は数学の多くの分野に現れるけれども、階乗のおおもとの出自は組合せ論にある。相異なる 個の対象の順列（-順列）の総数は 通りである。
階乗はしばしば「順番を無視する」という事実を反映するものとして分母に現れる。古典的な例としては 個の元から 個の元を選ぶ組合せ（-組合せ）の総数が挙げられる。このような組合せは順列から得ることができる。実際、-順列の総数
において、順番のみが違う（-組合せでは違いが無視される）-順列が 通りずつ存在するから、-組合せの総数は
となる。この数は、二項冪 における の係数となることから、二項係数 formula_8 とも呼ばれる。
代数学に現れる階乗にはいくつも理由があるが、既述の如く二項展開の係数として現れたり、ある種の演算の において置換による平均化を行うなど、組合せ論的な理由で現れるものもある。
微分積分学においても階乗は例えばテイラー級数の分母として現れるが、これは冪函数 の 階導函数が であることを補正する定数である。確率論でも階乗は用いられる。
階乗は数式操作にも有効である。例えば の -順列の総数を
と書けば、（この数値を計算することを考えれば効率が悪くなるが）二項係数の対称性
を見るには都合がよい。
階乗は数論にも多くの応用を持つ。特に は 以下の全ての素数で整除されねばならない。このことの帰結として、 が合成数となる必要十分条件は
が満たされることである。より強い結果としてウィルソンの定理は
が が素数であるための必要十分条件であることを述べる。
ルジャンドルの公式は の素因数分解に現れる の重複度が
であることを示す。これは 
と書いてもよい。ただし、 は の 進展開の係数の和である。
ブロカールの問題とは、
を満たす は存在するか、という問題である。2015年9月現在、これを満たす の組は
しか見つかっていない。ABC予想が真であれば、解は有限個しかないことが、Marius Overholt により示されている。
階乗の逆数の総和は収斂級数
を与える（ネイピア数を参照）。この和は無理数となるけれども、階乗に適当な正整数を掛けて和が有理数となるようにすることができる。例えば、
この級数の値が 1 となることを見るには、その部分和が 1 − 1/("n"+2)! であることを確認すればよい。したがって、階乗数の全体はを成さない。
が増えるにつれて、階乗 は を変数とする任意の多項式函数あるいは指数函数よりも早く増加する（ただし、よりは遅い）。
の近似に基づく。もっとも単純に得られる の近似値を評価する式は、上記の式と以下の積分:
によって与えられる。積分を評価すれば
を得る。これは、ランダウの記号を用いれば のオーダーは であることを言っているのであり、この結果はソートアルゴリズムの計算量を測るのに重要な役割を果たす。さて上記の の評価から
がわかる。実用上はより弱い結果だがより評価のしやすいものを用いることもある。上記の式から簡単な評価をしてみると、任意の に対して であり、また のとき であることなどが分かる。
大きな に対して をよりよく評価するにはスターリングの公式
を利用する。（ここで formula_23 は両辺の比が に収束することを表す。）実は任意の に対して
であることが証明できる。
したがって
と与えられている。この近似の誤差は、スターリングの公式よりも小さい。
負の整数を除けば、階乗函数は非整数の値に対しても定義することができるが、そのためには解析学の道具立てが必要である。そのように階乗の値を「補間」して得られるものの一つがガンマ函数 である（ただし引数が 1 だけずれる）。これは負の整数を除く任意の複素数 に対して定義される。 の実部が正である場合には
で与えられる。ガンマ函数と階乗との関係は、任意の自然数 に対して
が成り立つことである。オイラーのもともとの定義式は
である。ガウスの導入した別表記として、負でない実数 に対するパイ函数 は
を満たす。ガンマ函数との関係は
である。非負整数 に対し
が成り立つことを思えば、こちらのほうが階乗を補完した函数としては適していると言えるかもしれない。さてパイ函数は階乗が満たすのと同じ漸化式
を、しかし定義される限り任意の複素数 に対して満たす。事実としてはこれはもう漸化式ではなくて函数等式と見るべきものであるが。この函数等式をガンマ函数に関するものに書き換えれば
となる。階乗を延長したものがパイ函数なのだから、定義可能な任意の複素数 に対して
と定めることは可能である。これらの補間函数を用いて半整数における階乗の値を定めるならば、例えば
が成り立ち、さらに自然数 に対して
が得られる。例えば
同様に に対して
が成り立ち、例えば
パイ函数が殆ど全ての複素数値に対して定義される階乗の延長として唯一のものでないことはもちろんである。それは定義域において解析的としても同じことである。しかし、ふつうはこれが階乗の複素函数への最も自然な延長であるものと考える。例えば、ボーア・モレルップの定理はガンマ函数が かつ函数等式 を満足する、ガウス平面の全域で有理型かつ実軸の正の部分でとなるような唯一の函数であることを述べる。同様の主張はパイ函数に関しても、函数等式 に関して述べられる。
そうは言うものの、解析的函数論の意味で恐らくより簡明な、階乗の値を補間する複素函数は存在する。例えばアダマールの「ガンマ」函数はガンマ函数とは異なり整函数になる。
オイラーはまた非整数の階乗に対する近似無限乗積
についても考察している。これは上記のガンマ函数に関する公式と同じものと見做すことができる。しかしこの公式は収束が遅く、実用的な意味でパイ函数やガンマ函数の値を計算することに利用することはできない。
複素変数の階乗の値をガンマ函数による表現を通して評価することができる。絶対値 と偏角 を用いて
と書けば、絶対値一定曲線 と偏角一定曲線 を等値線として格子を描くことができる。一定間隔で引いた等値線の間にさらに細かく等値線を引けば、それが補間で得られる値である。極である負の整数においては絶対値と偏角が定義できず、またその周辺で等値線は密になる。
が利用できる。この展開のより多くの項は、Sageのような計算機代数システムで計算できる。
大きな値に対する階乗の値の近似をディガンマ函数の積分を通じて連分数表示を用いて記述できる。この方法はスティルチェスによるもので、 と書けば は
で、スティルチェスはこの第一項 の連分数展開
を与えた。
さて、任意の複素数 に対して あるいは とするのは誤りであり、実際には実軸の近くの特定の範囲の でしか成り立たない（一方 である。引数の実部は大きいほど、虚部はより小さくなければならない。しかし逆の関係式 は原点を除くガウス平面の全域で有効である。ただし実軸の負の部分では収束性は弱くなる（特異点の周辺ではどのような近似もよい収束性を得ることが難しい）。一方、 または の範囲では上記の六つの係数は 精度の複素数に対してその階乗の近似値を得るのに十分である。より高い精度でより多くの係数を計算するには rational QD-scheme (H. Rutishauser's QD algorithm)を用いる。
関係式 を使えばある整数に対する階乗をそれより「小さい」整数の階乗から計算できる。この関係式を逆に使えば、「大きい」整数に対して与えられた階乗から
と計算することも可能である。しかし注意すべきは、これでは負の整数に関する階乗を計算することはできないということである（この式に従って を計算するには零除算が必要となりこれ以下の負の整数における階乗の値の計算は不可能となる）。このことはガンマ函数においても同じことで、ガンマ函数は負の整数を除くガウス平面の全域において定義できるにも拘らず、負の整数における値だけは定義することができない。
多重指数formula_47に対し階乗は、
と定義できる。これは例えば、多変数関数の展開に使われる。
マンジュル・バルガヴァは階乗を一般のデデキント環上で定義し、いくつかの古典的な問題を解決するために用いた。それらの階乗は整数ではなく、イデアルとなる。
階乗の類似として、二重階乗 は自然数 に対し一つ飛ばしに積を取る。二重階乗 は階乗 の二回反復合成 とは異なる。
奇数 に対する二重階乗の最初の方の値は
偶数 に対する二重階乗の値の最初の方は
で与えられる。
負の奇数にも拡張される（formula_51
）。また、複素数値への拡張として、以下が知られている。
formula_52
より一般に多重階乗 ("multifactorial") は、連続した整数の積である通常の階乗 、一つ飛ばしの積である二重階乗 、二つ飛ばしの積である三重階乗 または 、三つ飛ばしの四重階乗 または などを総称して言う。
と定義できる。定義域を拡張するものとして
とするものもある。
自然数 に対して、 の -順列の総数 は から始めて上から 個の連続する整数の積を取る（ある意味で不完全な階乗とも呼べる）階乗の類似物であった。これを下降階乗冪と呼ぶ。その反対に から始めて下から 個の連続する整数の積をとったもの を上昇階乗冪といい、これら二つを総称して階乗冪と呼ぶ。ただし一般に自然数に限らず（実数や複素数などに値をとる） を変数として
を考えることが多い。明らかに自然数 に対して
また一般に実数 に対して
と定義する（空積も参照）が のときもそうであるかは規約による（例えば上記の関係式 は のとき で矛盾しない。0^0も参照）。
素数階乗 ("Primorial") は最初の -個の素数の総乗
である。。
これは、素数が無限に存在するという命題の証明に用いられることがある。
の超階乗（"superfactorial"）は、階乗を入れ子に拡張したものである。ドル記号$を用いて書かれる。
nが3以上になると、非常に大きい値になる。
これとは異なる種類の超階乗 (superfactorial) の定義がある。 は、スーパー階乗（"superfactorial"）を定義した。例として、4のスーパー階乗は次のようになる。
一般的にスーパー階乗は下の式で定義される。
これは以下と同値:
最初のいくつかの値は、次のようになる:
スーパー階乗は、複素数値にも拡張できる。その結果はバーンズのG関数と呼ばれる。定義は次のようになる。
自然数に対しては、以下が成り立っている。
ハイパー階乗（"hyperfactorial"）は、以下で定義される。
これはとても大きくなっていく。最初のいくつかの値はつぎの通りである。
ハイパー階乗は定義域を複素数にまで拡張できる。それはK函数と呼ばれ、以下で定義される。
自然数nに対し、次が成り立つ。
以下、↑をクヌースの矢印表記とする。
階乗が連続する整数を順に「乗」じるのに対し、連続する整数を順に冪にする演算として階「冪」 ("exponential factorial") （感嘆符は右肩に添字として書く）は
であり、最初の5つの値は次のようになる。
これ以降は、グーゴルプレックス formula_71 より遥かに大きくなる（ を計算すると、およそ 6 ≒ 10 となる）。
全ての自然数の exponential factorial の逆数の総和は、
となる。この数は、超越数であり、リウヴィル数である。
また、高次 exponential factorial が定義される。例として、二次 exponential factorial は、
となる。一般の -次 exponential factorial は、
で与えられる。ただし、 は自然数である。