Skip to content

MATLAB - 阶乘

非负整数 ‘n’ 的阶乘,记作 n!,是所有小于等于 n 的正整数的乘积。它是组合数学、概率论和高等数学中的一个基本函数。

在 MATLAB 中计算阶乘,最有效、准确和推荐的方法是使用内置的 factorial() 函数。该函数经过性能优化,并能优雅地处理各种输入类型。

factorial 函数是向量化的,这意味着它可以同时对数组的每个元素进行操作。

输入 n 必须是非负实整数。如果您提供负整数或非整数,MATLAB 将抛出错误。

阶乘值增长极快。MATLAB 默认使用双精度浮点数。这会带来两个结果:

  • 大数:对于 n > 21,结果太大,无法精确表示为整数,而是作为浮点近似值返回。
  • 溢出:对于 n > 170,factorial(n) 的结果会超出最大的双精度数,并溢出为 Inf(无穷大)。

解决特大数问题:符号数学工具箱

Section titled “解决特大数问题:符号数学工具箱”

要精确计算 n > 170 的阶乘,您可以使用 Symbolic Math Toolbox™(符号数学工具箱)。首先将数字转换为符号对象。

尽管在实际应用中应始终使用内置的 factorial 函数,但编写自己的版本是一个很好的编程练习。以下是两种常见的方法。

这种方法通过循环和乘法构建结果。

递归函数是调用自身的函数。这是一种优雅但通常效率较低的定义阶乘的方式。

如果您正在使用阶乘,您可能还会对以下函数感兴趣:

  • gamma(x):Gamma 函数,它是阶乘的推广。对于整数 n,gamma(n+1) = factorial(n)。
  • nchoosek(n, k):计算二项式系数“n 选 k”,即从 n 个项目中选择 k 个项目的方法数。它使用阶乘定义:n! / (k! * (n-k)!)。