Python練習題 階乘累計求和

2021-08-21 03:12:15 字數 1580 閱讀 7325

授課老師:嵩天、黃天羽、禮欣

題目描述:

獲得使用者輸入的整數n,輸出 1!+2!+…+n!的值。

如果輸入數值為0、負數、非數字或非整數,輸出提示資訊:輸入有誤,請輸入正整數。

方法一:

#facttest1

defmain

(): 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)

defgetsum

(i):

sum = 0

if i==0:

return

0else:

for x in range(1,i+1):

sum += fact(x)

return sum

deffact

(m):

if m==0:

return

1else:

return m*fact(m-1)

defmain

(): 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書中練習題 python練習題

1 定義乙個空列表,接收從鍵盤輸入的整數,把列表傳給乙個從大到小排序的函式,再輸出排序後的列表的值 listex b 0 a int input 請輸入列表長度 while b a num int input 請輸入字元 b 1 print listex sum 0 for i in range 0...

python的練習題 Python練習題

1 使用while迴圈輸入1 2 3 4 5 6 8 9 10 i 0while i 10 i i 1 if i 7 continue print i 結果 e python python python test.py1 2 求1 100的所有數的和 i 0sum 0 while i 100 i 1...

Python練習題 021 遞迴方法求階乘

python練習題 021 利用遞迴方法求5 首先得弄清楚 5 指的是 5的階乘 即 5 1 2 3 4 5。然後呢,據說,遞迴 就是對自身進行呼叫的函式。聽著挺奇怪,反正先依葫蘆畫瓢,寫 如下 def f x if x 0 return 0 elif x 1 return 1 else retur...