logo

因数階乗0が0!=1と定義される理由 📂関数

因数階乗0が0!=1と定義される理由

定義

0N0 \notin \mathbb{N}に対する階乗0!0!を次のように定義する。 0!:=1 0! := 1

説明

なぜ0!0!00ではなく、11なのか?元々0!:=10! := 1は定義だから証明する必要はなく、なぜそういう定義が妥当なのかを知るプロセスは「このような定義をしたので納得してほしい」という要求に近い。レベルに合ったステップで理解しよう。

中学生レベル

自然数nnに対して、n!n!は次のように定義できる。 n!:=n×(n1)××2×1 n! := n \times (n-1) \times \cdots \times 2 \times 1 簡単に言うと、階乗はnnから11ずつ引きながらかけた数で、それほど難しくもなく、なぜこれが必要なのかもすぐに分かる。中学校から順列と組み合わせで階乗に触れられるし、順列nPr_{n} P _{r}二項係数nCr_{n} C_{r}にすぐに現れる。 nPr:=n(n1)(r+1)r=n!(nr)!nCr:=nPrr!=n!r!(nr)! \begin{align*} _{n}P_{r} &:=& n ( n - 1 ) \cdots ( r + 1 ) r &=& {{ n! } \over { (n-r)! }} \\ _{n}C_{r} &:=& {{ _{n}P_{r} } \over { r! }} &=& {{ n! } \over { r! (n-r)! }} \end{align*} ここでr=nr = nとするのは、nn個のアイテムの中から全てのnn個を選び出して順列と組み合わせを計算するということで、nPn=n!/0!_{n} P _{n} = n! / 0!nn個のアイテムを順番に並べる場合の数n!n!と同じであり、nCn=n!/n!0!_{n} C _{n} = n! / n! 0!nn個のアイテムを全て選び出す場合の数11と同じでなければならない。この時x=0!x = 0!は形式的には次の方程式を満たす数でなければならない。 {n!x=n!n!n!x=1 \begin{cases} \displaystyle{{ n! } \over { x }} &= n! \\ \displaystyle {{ n! } \over { n! x }} &= 1 \end{cases} 連立方程式である理由は特にないが、いずれにせよ、2つの方程式を同時に満たす解はx=1x = 1である。これはnPr_{n}P_{r}nCr_{n}C_{r}が階乗として定義される形が妥当と受け入れられた状態で、0!0!11として定義した場合、数式的にきれいで便利であることを示している。広く深い数学の世界で階乗が何を意味するのか分からなくても、現時点で実用的な定義であることは明らかだ。

高校生レベル1

高校生くらいになると、指数関数を学びながらaaのべき乗がどのように負の数に拡張されるのかを知る。まず、自然数に対する22のべき乗は次のように常識的に展開される。 22=423=824=1625=32 \begin{align*} 2^{2} =& 4 \\ 2^{3} =& 8 \\ 2^{4} =& 16 \\ 2^{5} =& 32 \\ \vdots & \end{align*} 見ての通り、2x2^{x}は一行一行下がるごとに、xx11ずつ増加しながら22倍に増加している。これは、数学が苦手でもすぐに理解できるべき乗の概念だ。一方、これを整数全体に一般化する過程は、本を見てそのパターンを見ないと理解しにくい。 22=421=220=121=0.5 \begin{align*} 2^{2} =& 4 \\ 2^{1} =& 2 \\ 2^{0} =& 1 \\ 2^{-1} =& 0.5 \\ \vdots & \end{align*} やはり、2x2^{x}は一行一行下がるごとに、xx11ずつ減少しながら22で割られている。これは、20,212^{0}, 2^{-1}という表現が正しいか、そんなことが可能かどうかを超えて、形式的に意味があるパターンを示している。2x2^{x}の例から学べることは、2x2^{x}という表現が、xxが増加するときは2倍になり、減少するときは半分になるということを見事に示していることだ。

では、階乗に戻ろう。n!n!(n1)!(n-1)!nnをかける方法で次のように展開される。 1!=12!=1!×23!=2!×34!=3!×4 \begin{align*} 1! =& 1 \\ 2! =& 1! \times 2 \\ 3! =& 2! \times 3 \\ 4! =& 3! \times 4 \\ \vdots & \end{align*} 指数関数の例でしたように、これを「意味がある方法で」反転させよう。n!n!nnを掛けながら増えたのだから、今はnnが減少するにつれて割ることになる。 4!=5!÷53!=4!÷42!=3!÷31!=2!÷20!=1!÷1 \begin{align*} \vdots & \\ 4! =& 5! \div 5 \\ 3! =& 4! \div 4 \\ 2! =& 3! \div 3 \\ 1! =& 2! \div 2 \\ 0! =& 1! \div 1 \end{align*} 1!=k=1111! = \prod_{k=1}^{1} 1だからこれを11で割った1!÷1=0!1! \div 1 = 0!は「常識的に」11になる。注目すべき点は、このような説得が0!=10! = 1がどのように役立つのかについて全く教えてくれないということだ。ただ単に数学的直観でこれが意味があるからと、その美しさだけでこの定義を推し進めている。

大学生レベル

大学生になると、微分積分学で範囲が無限の有界されない異常積分を学び、様々な専門書でガンマ関数というものを学ぶ。

階乗の一般化としてのガンマ関数自然数nNn \in \mathbb{N}に対して、Γ(n)=(n1)!\Gamma (n) = (n-1)!が成立する。

階乗ガンマ関数の特別なケースになるためには、0!=10! = 1でなければならない。ガンマ関数は以下のように定義される Γ(x)=0tx1etdt \Gamma (x) = \int_{0}^{\infty} t^{x-1} e^{-t} dt で、x=1x=1を代入すると Γ(1)=0t11etdt=0etdt=[et]0=0(1)=1 \begin{align*} \Gamma (1) =& \int_{0}^{\infty} t^{1-1} e^{-t} dt \\ =& \int_{0}^{\infty} e^{-t} dt \\ =& \left[ - e^{-t} \right]_{0}^{\infty} \\ =& - 0 - (-1) = 1 \end{align*} であり、0!=Γ(1)0! = \Gamma (1)なので、n!n!00に拡張するには、0!=10! = 1として定義することが妥当だ。

冗談

もともとプログラミングでは0!=1が真(True)でなければならないので、0!=10!=1が正しい。