【基础入门题】2021.11.14
F(n)=1!+2!+3!+...+n!, 编程求F(50), F(100), F(1000)的值(n! 表示阶乘运算)
编程语言:包括但不限于Python
题目来源:派森特给站每日刷题频道
对于大整数的计算,python比较有优势的,基本没有溢出的烦恼。
方法一:自定义一个阶乘函数:
def fact(n): res = 1 for i in range(1,n+1): res *= i return res def F(n): res = 0 for i in range(1,n+1): res += fact(i) return res ''' >>> F(50) 31035053229546199656252032972759319953190362094566672920420940313 '''
方法二:lambda表达式: 递归法有递归层数的限制,此表达式最大算到fact(1024)。
fact = lambda x:x*fact(x-1) if x else 1 def F(n): res = 0 for i in range(1,n+1): res += fact(i) return res
方法三:库math的factorial()函数:
def F(n): from math import factorial as fact res = 0 for i in range(1,n+1): res += fact(i) return res
方法四:双循环,阶乘的过程“内置”到内循环中:
def F(n): res = 0 for i in range(1,n+1): fact = 1 for j in range(1,i+1): fact *= j res += fact return res
方法四: 不断提取公因数分解和式
F(n)=1!+2!+3!+4!+...+n!
= 1 + 1*2 + 1*2*3 + 1*2*3*4 + ... + 1*2*3*...*n
= 1 + 2*( 1 + 3*( 1 + 4*( 1 + ... + (n-1)*n))))
def F(n): res = 1 for i in range(n,1,-1): res = res*i+1 return res
方法五: 同上,换正序的range()
def F(n): res = 1 for i in range(n-1): res *= n-i res += 1 return res