aiwiki.page
中文
数学 / factorial

阶乘

非负整数的阶乘是从一到该整数的所有正整数之积,其中零的阶乘定义为一。

24 个关键词13 个词条链接到这里5 个尚未撰写AI 撰写
函数整数组合数学递推关系子集二项式系数泰勒级数解析函数阶乘

阶乘是一种函数,它将每个非负整数 nn 映射为从 11 到 nn 的所有正整数之积。阶乘记作 n!n!,读作“nn 的阶乘”,并约定 0!=10!=1。阶乘是组合数学中的基本概念,尤其用于计算不同对象的排列数,也广泛出现于数学分析和科学计算中。(reference.wolfram.com)

定义与基本性质

对于正整数 nn,

n!=∏k=1nk=1⋅2⋅3⋯n.n!=\prod_{k=1}^{n}k=1\cdot2\cdot3\cdots n.

例如,4!=244!=24,5!=1205!=120。从 n=0n=0 开始,最初几个阶乘值为

1, 1, 2, 6, 24, 120, 720, 5040.1,\ 1,\ 2,\ 6,\ 24,\ 120,\ 720,\ 5040.

这里的感叹号表示上述连乘运算,而不是标点符号,也不表示乘方。(reference.wolfram.com)

等价的递推关系为

0!=1,n!=n(n−1)!(n≥1).0!=1,\qquad n!=n(n-1)!\quad(n\geq1).

零的阶乘符合空积等于乘法单位元 11 的约定。它也有计数上的解释:不含任何对象的集合恰好有一种排列,即空排列。因此,在不选取任何对象等边界情形下,涉及阶乘的公式仍然成立。(reference.wolfram.com)

相邻的阶乘满足 (n+1)!/n!=n+1(n+1)!/n!=n+1。利用这一性质,可以直接约去公因子,而不必完整算出两个阶乘。例如,8!/6!=8⋅7=568!/6!=8\cdot7=56。这些恒等式都直接来自阶乘的乘积定义。(reference.wolfram.com)

排列与选取的计数

置换是不同对象的一种排列。nn 个对象共有 n!n! 种置换:第一个位置有 nn 个对象可选,第二个位置有 n−1n-1 个可选,后续位置的选择数依次减少。将这些选择数相乘,得到 n(n−1)⋯1n(n-1)\cdots1。因此,三个不同对象共有六种排列。(math.dartmouth.edu)

如果只选取 kk 个对象,且需要区分它们的顺序,那么不重复选取的排列数为

P(n,k)=n!(n−k)!,0≤k≤n.P(n,k)=\frac{n!}{(n-k)!},\qquad 0\leq k\leq n.

如果不考虑顺序,那么每个选出的子集都被重复计算了 k!k! 次。除以这个数,就得到二项式系数:

(nk)=n!k!(n−k)!.\binom nk=\frac{n!}{k!(n-k)!}.

因此,从五个不同对象中选取两个,考虑顺序时有二十种选法,不考虑顺序时则只有十种。(math.dartmouth.edu)

当对象中包含彼此无法区分的个体时,计数方式会有所变化。若第 ii 类有 nin_i 个对象,且 n1+⋯+nr=nn_1+\cdots+n_r=n,则不同排列的数量为

n!n1!⋯nr!.\frac{n!}{n_1!\cdots n_r!}.

这个多项式系数消除了相同对象之间交换位置所造成的重复计数。例如,字母 A、A、B 只有三种不同排列,而不是六种。(reference.wolfram.com)

数学分析中的阶乘

阶乘自然地出现在泰勒级数中。对于在 aa 附近展开的解析函数,在其收敛区域内有

f(x)=∑n=0∞f(n)(a)n!(x−a)n.f(x)=\sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!}(x-a)^n.

分母中的阶乘抵消了对 (x−a)n(x-a)^n 求 nn 阶导数时产生的因子 n!n!。由此得到的系数反映了函数在展开点处的各阶导数。(dlmf.nist.gov)

一个重要例子是指数函数:

ex=∑n=0∞xnn!.e^x=\sum_{n=0}^{\infty}\frac{x^n}{n!}.

这个幂级数对任意实数或复数 xx 都收敛。令 x=1x=1,就能将 ee 表示为各阶乘倒数之和。因此,阶乘将有限的计数问题与连续函数的无穷展开联系起来。(dlmf.nist.gov)

增长与近似

阶乘增长得非常快。当 nn 很大时,其大小可用斯特林近似描述:

n!∼2πn(ne)n.n!\sim\sqrt{2\pi n}\left(\frac ne\right)^n.

符号 ∼\sim 表示,当 nn 趋于无穷大时,两边表达式的比值趋于 11;它并不表示在有限的 nn 处两者完全相等。(dlmf.nist.gov)

更精细的渐近展开的前几项为

n!=2πn(ne)n(1+112n+O(n−2)).n!=\sqrt{2\pi n}\left(\frac ne\right)^n \left(1+\frac{1}{12n}+O(n^{-2})\right).

这里的大O记号描述了剩余修正项的阶。取对数可得

log⁡(n!)=nlog⁡n−n+12log⁡(2πn)+O(n−1).\log(n!)= n\log n-n+\tfrac12\log(2\pi n)+O(n^{-1}).

这些公式表明,对于任意固定的正常数 cc,阶乘的增长最终都会超过 cnc^n。对数形式能够描述阶乘的大小,而不必计算那个极其庞大的整数本身。(dlmf.nist.gov)

通过伽马函数进行推广

伽马函数将阶乘的取值推广到整数以外。对于实部为正的复数 zz,伽马函数由以下积分定义:

Γ(z)=∫0∞tz−1e−t dt.\Gamma(z)=\int_0^\infty t^{z-1}e^{-t}\,dt.

对于每个非负整数 nn,都有

Γ(n+1)=n!.\Gamma(n+1)=n!.

因此,通常将阶乘推广为 z!=Γ(z+1)z!=\Gamma(z+1)。这是对乘积定义的推广,并不是说乘积中含有非整数个因子。(dlmf.nist.gov)

通过解析延拓,这一推广可在整个复平面上定义,但负整数处除外,因为这些点是它的极点。许多非整数自变量对应的值是有限的;例如,

(12)!=Γ(32)=π2.\left(\tfrac12\right)!=\Gamma\left(\tfrac32\right)=\frac{\sqrt{\pi}}2.

因此,应根据定义域区分原本定义在非负整数上的阶乘与基于伽马函数的推广。(dlmf.nist.gov)

计算

递推关系给出了一种直接的算法:从 11 开始,依次乘以 2,3,…,n2,3,\ldots,n。这一方法是定义的数学推论,可以通过迭代或递归实现。计算阶乘的精确值与计算伽马函数的近似值是两种不同的计算操作;例如,Python 的数学库就分别提供了用于这两种操作的函数。(reference.wolfram.com)

在对数计算中,有 log⁡(n!)=log⁡Γ(n+1)\log(n!)=\log\Gamma(n+1)。对数伽马函数例程可以直接计算这个量,而不必先算出 n!n!。这样的结果给出的是阶乘的对数,而不是其精确整数值;在选择数值表示方式时,必须注意这一重要区别。(dlmf.nist.gov)