我是靠谱客的博主 文艺绿茶,最近开发中收集的这篇文章主要介绍【基础入门题018】求阶乘的和,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

欢迎加入CSDN社区!!!https://bbs.csdn.net/forums/PythonTogethericon-default.png?t=LA92https://bbs.csdn.net/forums/PythonTogether

最后

以上就是文艺绿茶为你收集整理的【基础入门题018】求阶乘的和的全部内容,希望文章能够帮你解决【基础入门题018】求阶乘的和所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部