python中如何求阶乘

最推荐使用math.factorial(),高效安全且支持大数;手动循环实现适合教学,自然处理0!;递归实现需设base case,但深度过大易报RecursionError。

Python中求阶乘最直接的方式是用 math.factorial(),它高效、安全、无需自己实现逻辑。

用 math 模块直接计算

这是推荐做法,适用于非负整数:

  • 导入 math 模块后调用 math.factorial(n)
  • 输入必须是非负整数,否则抛出 ValueError
  • 支持大数(Python 自动处理高精度)

示例:

import math
print(math.factorial(5)) # 输出:120
print(math.factorial(0)) # 输出:1

用循环手动实现

适合理解原理或教学场景,也便于加调试或条件控制:

立即学习“Python免费学习笔记(深入)”;

  • 从 1 乘到 n,初始结果设为 1
  • 注意 0! = 1 是边界条件,循环自然兼容(range(1, 0+1) 不执行,结果保持 1)

示例:

def factorial(n):
  if n     raise ValueError("阶乘不支持负数")
  result = 1
  for i in range(1, n + 1):
    result *= i
  return result

print(factorial(4)) # 输出:24

用递归方式实现

体现数学定义(n! = n × (n−1)!,且 0! = 1),但要注意栈深度限制:

  • 递归简洁,但 n 过大(如 >1000)可能触发 RecursionError
  • 务必包含 base case(n == 0 或 n == 1)

示例:

def factorial(n):
  if n     raise ValueError("阶乘不支持负数")
  if n     return 1
  return n * factorial(n - 1)

print(factorial(3)) # 输出:6

注意事项

实际使用时需留意:

  • 输入校验:math.factorial 不接受浮点数或字符串,传入会报 TypeError
  • 性能差异:math.factorial 是 C 实现,比纯 Python 循环或递归快得多
  • 大数无压力:Python 整数无溢出问题,1000! 也能准确算出(只是位数很长)