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

San*_*nia 2 python recursion python-3.x

所以这就是我到目前为止

def factorial(n):
  if n == 0:
    return 1 
  else: 
    return n * factorial(n-1)
Run Code Online (Sandbox Code Playgroud)

计算阶乘,但如何将总和相加?

blh*_*ing 5

@DarryIG和@bkbb的答案会起作用,但效率不高,因为对于较高的数字,它会反复使用相同的数字进行重复的递归调用,其结果相同。您可以缓存结果以提高效率。

另外,由于:

sum_factorials(n) = (sum_factorials(n-1) - sum_factorials(n-2)) * n + sum_factorials(n-1)
Run Code Online (Sandbox Code Playgroud)

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

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]
Run Code Online (Sandbox Code Playgroud)

这样sum_factorials(4)返回:

33
Run Code Online (Sandbox Code Playgroud)