用Python编写第五题的程序

2020-05-05 教育 56阅读
## 假定我们已经限制了n只能会是奇数
def sum_odd_factorials(n, d):
    # 如果n已经算过了,直接返回算好的答案
    if n in d:
        return d[n]
    if n == 1:
        return 1
    elif n == 3:
        return 7
    
    # 前面的和,如果n是5,那前面的和就是 1! + 3!
    prev_sum = sum_odd_factorials(n-2, d)
    # 构建答案,前面的和 + (前面的和 - 再前面的和)*(n-1)*n
    # 例如n = 5, ret = (1!+3!) + (3!)*4*5 
    ret = prev_sum + (prev_sum - sum_odd_factorials(n-4, d)) * (n-1) * n
    
    # 保存n对应的答案
    d[n] = ret
    return ret
# 用字典来保存算过的n,避免重复运算,牺牲内存换速度的意思
d = {}
sum_odd_factorials(11, d)

我提供的不是什么很高级的算法, 只是单纯用迭代来完成,也许楼上的答案已经够好了(起码容易懂),这只是另一种思路。
有意学算法的话可以分析一下。

声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com