-
2020-12-13 18:39:32
需求:
阶乘:也是数学里的一种术语;阶乘指从1乘以2乘以3乘以4一直乘到所要求的数;在表达阶乘时,就使用“!”来表示。如h阶乘,就表示为h!;阶乘一般很难计算,因为积都很大。
提问:求1+2!+3!+...+20!的和
实现环境:python3
编辑器:pycharm
分析:1、阶乘的计算就是比较麻烦的一部分,用递归函数实现是比较好的方案,先定义一个递归函数实现求阶乘功能。def recursion(n):
'定义递归函数实现求阶乘功能'
if n==1:
return 1
else:
return n*recursion(n-1)
2、求和思路,可以直接求和,也可以定义一个列表将for遍历遍历得到的阶乘结果追加到列表,然后使用sum()函数求和。sum_0=0
print("for循环直接调用递归函数求和".center(80,"*")) #显示效果明显
for i in range(1,21):
sum_0 +=recursion(i)
print(sum_0)
列表求和方案:
list=[] #定义一个空的列表,将调用递归函数生成的阶乘值追加到列表
print("将1-20的阶乘写入列表,使用sum函数求和".center(80,"*")) #显示效果明显
for i in range(1,21):
list.append(recursion(i))# 将调用递归函数生成的阶乘值追加到列表
print(sum(list)) #列表求和
两者代码行数一样多都可以实现其功能。
使用知识点:递归函数 for循环 range()函数等。
完整源代码以及结果:#/usr/bin/env python
#_*_coding:utf-8_*_
def recursion(n):
'定义递归函数实现求阶乘功能'
if n==1:
return 1
else:
return n*recursion(n-1)
list=[] #定义一个空的列表,将调用递归函数生成的阶乘值追加到列表
print("将1-20的阶乘写入列表,使用sum函数求和".center(80,"*")) #显示效果明显
for i in range(1,21):
list.append(recursion(i))# 将调用递归函数生成的阶乘值追加到列表
print(sum(list)) #列表求和
sum_0=0
print("for循环直接调用递归函数求和".center(80,"*")) #显示效果明显
for i in range(1,21):
sum_0 +=recursion(i)
print(sum_0)
结果:
*****************************将1-20的阶乘写入列表,使用sum函数求和*****************************
2561327494111820313
********************************for循环直接调用递归函数求和*********************************
2561327494111820313
经过验证两者都可以实现基本的功能,但是未测试更大数据量的计算。
更多相关内容 -
Python阶乘求和的代码详解
2020-09-17 22:40:03在本篇文章里小编给大家整理的是关于Python阶乘求和的代码实例,有需要的朋友们可以跟着学习下。 -
用Python进行1的阶乘到10的阶乘相加的计算
2022-03-19 11:10:58用Python实现1的阶乘到10的阶乘相加之和 对于阶乘我们不得不想到迭代,但其实除了迭代还有其他的办法,这里我将介绍我知晓的几种方法: 首先我们应知道迭代和递归的区别: 递归是针对于函数来讲的,我们常说函数递归...用Python实现1的阶乘到10的阶乘相加之和
对于阶乘我们不得不想到迭代,但其实除了迭代还有其他的办法,这里我将介绍我知晓的几种方法:
首先我们应知道迭代和递归的区别:
递归是针对于函数来讲的,我们常说函数递归调用,这是函数的一种调用方法。
而迭代是针对结构的,它是在结构里面的进行的,如在循环结构里面进行迭代。
了解了这些之后,下面进行方法讲解,首先我们先使用迭代法,具体代码及运行结果如下:方法一:使用普通迭代方法求解
#方法一 def multiplication(i): sum =1 for j in range(1,i+1): sum *=j #这里我们使用迭代的方法对阶乘进行计算, return sum mul = 0 for i in range(1,11): mul +=multiplication(i) print("请输出1-10的阶乘之和:%d"%mul)
这是最终的结果,当然我们可以拆解这个步骤,与我发的1-500之间素数的和一样,首先要有个构思:
第一步,如何实现从一个数据开始并依次-1进行乘法,这肯定需要一个循环语句,那么又如何操作下去,进行迭代,设好变量,将所设变量进行持久往复使用。
第二步,那么我们现在开始实现一个阶乘的迭代,如代码所示,使sum和j一直进行使用,直接调用multiplication()函数实验,此时不考虑下方的for循环。
第三步,最后尝试用for循环将题目要求的1-10各数据进行遍历阶乘相加,得到结果。
这是第一种方法,接下来展示方法二:使用递归函数调用求解
代码及运行结果如下:#方法二 def multiplication(i): sum = 1 if i==0: return 1 elif i>0: sum = i*scan(i-1) #在这里我们使用的是递归调用方法,用变量sum进行一个阶乘的值并返回 return sum else: return 0 mul = 0 for i in range(1,11): mul += multiplication(i) print("请输出1-10的阶乘之和:%d"%mul)
具体思路还是和上面一样,但是创建的递归函数是由函数自身进行相乘,这与上面讲的迭代和递归的区别进行理解,这里递归的原理不进行详解。
方法三:使用reduce函数进行迭代求解
#方法三 from functools import reduce #声明加载functools中的函数reduce,相当于C语言中的宏文件声明 def multiplication(i): a = 0 for j in range(1,i+1): #lamdba函数是自己所调用使用的虚拟函数,相当于对Java语言中的抽象类中的抽象方法进行重写 a +=reduce(lambda x,y:x*y,range(1,j+1)) #这里使用for循环进行1-10的数进行遍历阶乘,类似于迭代,最终用a承载并返回 return a #是方法一的简化版 print("请输出1!+...+10!之和为:{}".format(multiplication(10)))
首先介绍reduce函数的用法及工作过程,调用格式为:
reduce(function ,sequence[,initial])
function为含有两个参数的函数,sequence是元组,列表等可迭代对象,initial为自定义的迭代初始值(可选可不选),在迭代sequence时,默认将前两个元素传给function,函数运行后将返回值与sequence中的第三个元素继续传给function进行计算,如此往下,依次进行。
我这里使用的是lamdba虚拟函数作为reduce函数内的函数使用,可理解为嵌套。lamdba是一个表达式,一个匿名函数,自己定义参数列表,自己定义函数主体。其他的作用及限制不再描述。
从代码中可看出相对于方法一来说,方法三更简便,至少少了一个for循环。具体内容还需要读者仔细推敲。
对于函数的嵌套,递归等,之后写一篇关于C语言的函数调用(对于有返回值和无返回值,难度理解对比有很大的不同,特别是运用到了指针之后)。如觉得内容稍可,希望留下你们的
,
如有疑问,欢迎下方留言! -
Python阶乘求和
2021-07-08 11:19:50获得用户输入的整数n,输出 1!+2!+…+n!的值。 思路: 依次计算每个阶乘的值,然后相加起来,即可得到结果 代码: # 获得用户输入的整数n,输出 1!+2!+…+n!的值。 num = int(input("please input a number:")) num...题目:
获得用户输入的整数n,输出 1!+2!+…+n!的值。思路:
依次计算每个阶乘的值,然后相加起来,即可得到结果代码:
# 获得用户输入的整数n,输出 1!+2!+…+n!的值。 num = int(input("please input a number:")) sum = 0 for i in range(1,num+1): x = 1 for j in range(1,i+1): x = x * j sum = sum+ x print("1!+...+{}!的阶乘结果是{}".format(num,sum))
运行截图:
-
Python阶乘求和的方法
2021-01-13 04:56:05Python阶乘求和的方法题目描述:获得用户输入的整数n,输出 1! 2! … n!的值。如果输入数值为0、负数、非数字或非整数,输出提示信息:输入有误,请输入正整数。(推荐学习:Python视频教程)方法一:#factTest1def ...Python阶乘求和的方法
题目描述:
获得用户输入的整数n,输出 1! 2! … n!的值。
如果输入数值为0、负数、非数字或非整数,输出提示信息:输入有误,请输入正整数。
(推荐学习:Python视频教程)
方法一:#factTest1
def main():
a = input()
sum = 0
if a.isdigit():
n = eval(a)
if n > 0:
fact = 1
for i in range(1, n 1):
fact *= i
sum = fact
print(sum)
else:
print("输入有误,请输入正整数")
else:
print("输入有误,请输入正整数")
main()
方法二:递归思想#factTest2
import sys
sys.setrecursionlimit(5000)
def getSum(i):
sum = 0
if i==0:
return 0
else:
for x in range(1,i 1):
sum = fact(x)
return sum
def fact(m):
if m==0:
return 1
else:
return m*fact(m-1)
def main():
n = input()
if n.isdigit():
a = eval(n)
if a>0:
result = getSum(a)
print(result)
else:
print("输入有误,请输入正整数")
else:
print("输入有误,请输入正整数")
main()
问题总结:
当使用递归方法求1024的阶乘时,出现了一个异常:RecursionError: maximum recursion depth exceeded in comparison,超出了递归的最大深度。一些网友提到Python中默认的最大递归深度为1000,但在实际测试中,我的电脑到997的时候就出现异常了,不知道这是由什么决定的。因此,为了能够计算1024的阶乘,需要为最大递归深度赋予一个更大的值。这里可以采用以下方法:import sys
sys.setrecursionlimit(5000) #修改为5000
另外,也可以查看最大递归深度:import sys
sys.getrecursionlimit() # output:1000
-
python代码之阶乘求和的方法
2020-12-29 02:07:42阶乘指从1乘以2乘以3乘以4一直乘到所要求的数;在表达阶乘时,就使用“!”来表示。如h阶乘,就表示为h!;阶乘一般很难计算,因为积都很大。提问:求1+2!+3!+...+20!的和实现环境:python3编辑器:pycharm分析:1、... -
python 阶乘累加和的实例
2020-09-19 15:59:06今天小编就为大家分享一篇python 阶乘累加和的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
Python练习:阶乘求和
2021-11-02 01:07:45要求:输入n 之后返回从1到n的阶乘的和的后六位(不含前导0) 思考与实践:首先我们先用input来获取输入的数值,之后我们定义一个函数来实现阶乘的计算,用一个for in 将n及n以内的数遍历出来,之后将他们相乘。... -
Python的阶乘求和
2021-02-05 17:04:33题目描述: 获得用户输入的整数n,输出 1!+2!+…+n!的值。 如果输入数值为0、负数、非数字或非...一些网友提到Python中默认的最大递归深度为1000,但在实际测试中,到997的时候就出现异常了,不知道这是由什么决定的 -
用python递归方式实现阶乘计算
2020-05-08 13:29:561、递归的特点 递归算法是一种直接或间接调用自身算法的过程,在计算机编程中,递归算法对解决一大类问题是十分,它往往使算法的描述简洁而且易于理解。 递归算法解决问题的特点: (1)递归就是在过程或函数里... -
Python——阶乘累加求和以及数列求和
2022-03-10 14:56:23要求:求和1!+2!+3!…+n!... -
阶乘求和python
2022-04-01 21:48:15描述 输入一个正整数n,计算1!+2!+3!+...+n!的和并输出。...从1到n每个数... -
Python3 阶乘求和
2019-04-20 08:41:06题目 求1+2!+3!+…+20!的和。 程序分析 1+2!+3!+…+20!=1+2(1+3(1+4(…20(1)))) res=1 for i in range(20,1,-1): res=i*res+1 print(res) -
Python数学问题12:阶乘求和
2021-06-01 20:48:16问题:求1+2!+3!+…+20!的和。 -
Python练习100【025】:阶乘求和
2021-03-25 09:42:24题目: 求1+2!+3!+…+20!的和。 程序分析: 1+2!+3!+…+20!=1+2(1+3(1+4(…20(1)))) # 从里往外加, #!/usr/bin/env python3 ... File Name: Python练习100【025】:阶乘求和 Author: zhangzx Date: -
python入门——阶乘累计求和
2018-07-28 19:52:41阶乘累计求和 描述 获得用户输入的整数n,输出 1!+2!+...+n!的值。 如果输入数值为0、负数、非数字或非整数,输出提示信息:输入有误,请输入正整数。 输入格式 使用input()获得系统输入,不增加额外的提示... -
Python 思维练习-5: 求1 到10 的阶乘之和
2018-09-06 16:17:35求1 到10 的阶乘之和