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)
计算阶乘,但如何将总和相加?
@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)
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |