python - 如何使用递归找到系列 1+ (1*2) + (1*2*3) … (1*2*3*…n) 的总和?

标签 python python-3.x recursion

这就是我目前所拥有的,

def factorial(n):
  if n == 0:
    return 1 
  else: 
    return n * factorial(n-1)

要计算阶乘,但如何添加总和?

最佳答案

@DarryIG 和@bkbb 的答案可行但效率低下,因为它会使用相同的数字重复递归调用,结果相同,一遍又一遍地获取更高的数字。您可以缓存结果以提高效率。

此外,由于:

sum_factorials(n) = (sum_factorials(n-1) - sum_factorials(n-2)) * n + sum_factorials(n-1)

你实际上不需要两个函数来实现递归:

def sum_factorials(n, cache=[0, 1]):
    if len(cache) > n:
        return cache[n]
    previous = sum_factorials(n - 1)
    cache.append((previous - sum_factorials(n - 2)) * n + previous)
    return cache[n]

因此 sum_factorials(4) 返回:

33

关于python - 如何使用递归找到系列 1+ (1*2) + (1*2*3) … (1*2*3*…n) 的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58071320/

相关文章:

python-3.x - 如何在 Odoo 11 中覆盖自定义模型的更新功能

python - 扁平化 OrderedDict 值的联合

java - 合并排序java错误(从edX.org学习

python - 我可以在 Windows 上使用 python 通过非默认扬声器播放声音吗?

python - 我想开发一个使用 gcc 编译和运行 c 程序的 python 脚本

python - 远程连接到 Elasticsearch 时连接被拒绝

python - 以迭代和递归的方式交换列表中的对 -Python3

python - 使用给定数字递增数组的快速方法

python - 以与 Python 2 和 Python 3 无关的方式重新引发异常

python - 如何在 Python 中使用递归反转列表?