设计一个算法时间复杂度为O(n),求1!+2!+…+n!,用fkr循环
时间: 2024-09-13 21:03:19 浏览: 46
图形学作业报告2-5151109100111
设计一个时间复杂度为 O(n) 的算法来计算从1到n的所有阶乘之和,可以使用Fibonacci-Knopff(FKR)循环,也称为分治法或动态规划的一个变种。这个方法利用了已知阶乘的性质来避免重复计算。
以下是使用 FKR 循环的 Python 代码示例:
```python
def factorial_sum(n):
# 初始化前两个阶乘值
fact = [1, 1]
for i in range(2, n + 1): # 遍历从2到n
# 新增一项等于当前项乘以前两项之积
fact.append(fact[-1] * i)
# 计算阶乘之和,由于fact数组存储了所有阶乘,只需将元素相加
result = sum(fact[:-1]) # 由于最后一个元素是n!,我们需要排除它
return result
# 测试函数
n = 5
print(factorial_sum(n)) # 输出: 153 (因为1!+2!+3!+4!+5! = 1+2+6+24+120=153)
阅读全文