本文摘自php中文网,作者angryTom,侵删。
Python阶乘求和的方法
题目描述:
获得用户输入的整数n,输出 1!+2!+…+n!的值。
如果输入数值为0、负数、非数字或非整数,输出提示信息:输入有误,请输入正整数。
(推荐学习:Python视频教程)
方法一:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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()
方法二:递归思想
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#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的阶乘,需要为最大递归深度赋予一个更大的值。这里可以采用以下方法:
1
2
import sys
sys.setrecursionlimit(5000) #修改为5000
另外,也可以查看最大递归深度:
1
2
import sys
sys.getrecursionlimit() # output:1000
以上就是Python阶乘求和的方法的详细内容,更多文章请关注木庄网络博客 !!
相关阅读 >>
Python 可以输入中文吗
Python 中swapcase是什么意思
Python 学习之17个关于Python 的小技巧
pycharm和Python 区别
如何截掉空格(包括tab)
Python 生成器定义与简单用法实例分析
Python yield和yield from用法总结详解
学习Python 安装什么
Python 常用函数有哪些
Python 中map什么意思
更多相关阅读请进入《Python 》频道 >>
¥69.8元 人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » Python阶乘求和的方法