
该教程介绍如何定义一个函数,接收单个整数参数 n,计算并返回从 0! 到 n! 的完整阶乘序列(含 0! = 1),避免重复打印、支持列表输出,并修正原始代码中的语法错误与逻辑偏差。
要实现 RangeFactorial(10) 这样简洁的调用方式,并返回 [0!, 1!, 2!, ..., 10!] 的列表,需明确两个职责分离:
✅ 阶乘计算(单个数)→ 定义 factorial(n)
✅ 范围批量计算(0 到 n)→ 定义 range_factorial(n)
首先,修复原始代码中的关键问题:
- 缺少函数定义后的冒号 :;
- range(1, n+1) 会跳过 0!(而 0! = 1 是数学定义,必须包含);
- 原始循环 for n in range(1, 10) 硬编码了范围,无法响应传入参数。
以下是完整、健壮、可复用的实现:
def factorial(n):
"""计算非负整数 n 的阶乘"""
if n < 0:
raise ValueError("阶乘未定义于负数")
result = 1
for x in range(1, n + 1): # 当 n==0 时,range(1, 1) 为空,result 保持 1 → 正确!
result *= x
return result
def range_factorial(n):
"""返回从 0! 到 n! 的阶乘值列表(长度为 n+1)"""
if n < 0:
raise ValueError("n 必须为非负整数")
return [factorial(i) for i in range(n + 1)] # 包含 0 到 n(共 n+1 个值)
# 使用示例:
print(range_factorial(5))
# 输出:[1, 1, 2, 6, 24, 120] ← 对应 0!, 1!, 2!, 3!, 4!, 5!
print(range_factorial(10))
# 输出:[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]? 关键说明:
- range(n + 1) 确保包含 0(索引 0 → 0!),这是满足题意“from 0 up to a specified value”的核心;
- 使用列表推导式 [factorial(i) for i in range(n + 1)] 比手动 append() 更简洁高效;
- 添加输入校验(如 n 代码规范;
- factorial(0) 自然返回 1(因 range(1, 1) 不执行循环),无需特殊 if n == 0 分支。
⚠️ 注意事项:
- 阶乘增长极快,range_factorial(100) 会产生超大整数(Python 支持,但需注意性能与内存);
- 若后续需频繁调用,可考虑动态规划预计算(缓存中间结果),但对一般用途,当前实现已清晰、正确且高效。
综上,range_factorial(n) 不仅满足“单参数调用 + 列表返回”的需求,还兼顾可读性、健壮性与数学严谨性——这才是 Python 风格的实用工具函数。










