我正在檢出doctest並將該因子示例複製到了我的編輯器中。由於使用遞歸感覺更多的函數式編程,我覺得像這樣改變例子;爲什麼遞歸更改結果?
def factorial(n):
# ... omitted
if n+1 == n: # catch a value like 1e300
raise OverflowError("n too large")
if n == 0:
return 1
else:
return factorial(n - 1) * n
在此更改後,其中一個測試失敗;
Failed example:
factorial(30.0)
Expected:
265252859812191058636308480000000L
Got:
2.6525285981219103e+32
這種差異的原因是什麼?
爲什麼不拋出OverflowError?啊!我明白了,它在** n **上拋出一個錯誤。 –
Python具有任意精度的長整數。 – mgilson