【基础入门题】
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