def sum_factorial(start, stop):
?# 遞歸求階乘
?def factorial(n):
if n == 0: return 1
return n * factorial(n-1)
?# 生成器解析式生成各個數的階乘,然後再求和
?return sum(factorial(i) for i in range(start, stop+1))
# 調用函數,測試代碼
print(sum_factorial(1, 20))
註意:在不調用庫的情況下,最容易想到的就是循環裏面套循環,不過這樣子占用時間為O(n^2)。當然妳這裏也就n=20,兩層循環沒啥問題,不過當n足夠大時,可以考慮用算法。
遞歸算法占用時間為O(n),壹個for循環為O(stop+1-start),兩者相加,比兩層循環效率高,當然這也是在n足夠大的時候,才談效率。