任务要求
计算1!+2!+…+20!的和,并将结果在控制台打印输出。
任务分析
阶乘累加问题需满足:
- 对每个数n(1≤n≤20)计算其阶乘n!。
- 将所有阶乘结果累加。
核心难点在于避免重复计算和处理大数溢出(Python默认支持大整数,无需额外处理)。
任务实现
方法一:直接循环法
total = 0
current = 1 # 存储当前阶乘值
for n in range(1, 21):
current *= n # 计算n! = (n-1)! * n
total += current
print("结果为:", total)
说明:利用current变量保存当前阶乘值,避免重复计算。
方法二:递归函数法
def factorial(n):
return 1 if n == 1 else n * factorial(n 1)
sum_result = sum(factorial(i) for i in range(1, 21))
print("结果为:", sum_result)
说明:
- 定义递归函数factorial计算单个阶乘
- 通过生成器表达式遍历求和
- 缺点:递归深度较大时效率较低(n=20时可行)
方法三:使用math.factorial库函数
import math
sum_result = sum(math.factorial(i) for i in range(1, 21))
print("结果为:", sum_result)
说明:直接调用Python内置的math.factorial函数
方法四:函数式编程法
from functools import reduce
sum_result = sum(
reduce(lambda x, y: x * y, range(1, i + 1))
for i in range(1, 21)
)
print("结果为:", sum_result)
说明:
- 使用reduce对连续整数序列进行累积计算
- lambda x, y: x * y实现乘法累积
- 特点:函数式编程风格,适合高阶应用场景