【基础入门题】

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