因数階乗0が0!=1と定義される理由
📂関数因数階乗0が0!=1と定義される理由
定義
0∈/Nに対する階乗の0!を次のように定義する。
0!:=1
説明
なぜ0!が0ではなく、1なのか?元々0!:=1は定義だから証明する必要はなく、なぜそういう定義が妥当なのかを知るプロセスは「このような定義をしたので納得してほしい」という要求に近い。レベルに合ったステップで理解しよう。
中学生レベル
自然数nに対して、n!は次のように定義できる。
n!:=n×(n−1)×⋯×2×1
簡単に言うと、階乗はnから1ずつ引きながらかけた数で、それほど難しくもなく、なぜこれが必要なのかもすぐに分かる。中学校から順列と組み合わせで階乗に触れられるし、順列nPrと二項係数nCrにすぐに現れる。
nPrnCr:=:=n(n−1)⋯(r+1)rr!nPr==(n−r)!n!r!(n−r)!n!
ここでr=nとするのは、n個のアイテムの中から全てのn個を選び出して順列と組み合わせを計算するということで、nPn=n!/0!はn個のアイテムを順番に並べる場合の数n!と同じであり、nCn=n!/n!0!もn個のアイテムを全て選び出す場合の数1と同じでなければならない。この時x=0!は形式的には次の方程式を満たす数でなければならない。
⎩⎨⎧xn!n!xn!=n!=1
連立方程式である理由は特にないが、いずれにせよ、2つの方程式を同時に満たす解はx=1である。これはnPrとnCrが階乗として定義される形が妥当と受け入れられた状態で、0!を1として定義した場合、数式的にきれいで便利であることを示している。広く深い数学の世界で階乗が何を意味するのか分からなくても、現時点で実用的な定義であることは明らかだ。
高校生レベル
高校生くらいになると、指数関数を学びながらaのべき乗がどのように負の数に拡張されるのかを知る。まず、自然数に対する2のべき乗は次のように常識的に展開される。
22=23=24=25=⋮481632
見ての通り、2xは一行一行下がるごとに、xが1ずつ増加しながら2倍に増加している。これは、数学が苦手でもすぐに理解できるべき乗の概念だ。一方、これを整数全体に一般化する過程は、本を見てそのパターンを見ないと理解しにくい。
22=21=20=2−1=⋮4210.5
やはり、2xは一行一行下がるごとに、xが1ずつ減少しながら2で割られている。これは、20,2−1という表現が正しいか、そんなことが可能かどうかを超えて、形式的に意味があるパターンを示している。2xの例から学べることは、2xという表現が、xが増加するときは2倍になり、減少するときは半分になるということを見事に示していることだ。
では、階乗に戻ろう。n!は(n−1)!にnをかける方法で次のように展開される。
1!=2!=3!=4!=⋮11!×22!×33!×4
指数関数の例でしたように、これを「意味がある方法で」反転させよう。n!はnを掛けながら増えたのだから、今はnが減少するにつれて割ることになる。
⋮4!=3!=2!=1!=0!=5!÷54!÷43!÷32!÷21!÷1
1!=∏k=111だからこれを1で割った1!÷1=0!は「常識的に」1になる。注目すべき点は、このような説得が0!=1がどのように役立つのかについて全く教えてくれないということだ。ただ単に数学的直観でこれが意味があるからと、その美しさだけでこの定義を推し進めている。
大学生レベル
大学生になると、微分積分学で範囲が無限の有界されない異常積分を学び、様々な専門書でガンマ関数というものを学ぶ。
階乗の一般化としてのガンマ関数:自然数n∈Nに対して、Γ(n)=(n−1)!が成立する。
階乗がガンマ関数の特別なケースになるためには、0!=1でなければならない。ガンマ関数は以下のように定義される
Γ(x)=∫0∞tx−1e−tdt
で、x=1を代入すると
Γ(1)====∫0∞t1−1e−tdt∫0∞e−tdt[−e−t]0∞−0−(−1)=1
であり、0!=Γ(1)なので、n!を0に拡張するには、0!=1として定義することが妥当だ。
冗談
もともとプログラミングでは0!=1
が真(True)でなければならないので、0!=1が正しい。