授課老師:嵩天、黃天羽、禮欣
題目描述:
獲得使用者輸入的整數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...