Skip to content

Commit 042ac0b

Browse files
committed
Add recursive factorial implementation
1 parent 3c88735 commit 042ac0b

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

maths/factorial.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -34,35 +34,35 @@ def factorial(number: int) -> int:
3434
value *= i
3535
return value
3636

37-
38-
def factorial_recursive(n: int) -> int:
37+
def factorial_recursive(number: int) -> int:
3938
"""
40-
Calculate the factorial of a positive integer
41-
https://en.wikipedia.org/wiki/Factorial
39+
Calculate the factorial of a number using recursion.
4240
4341
>>> import math
44-
>>> all(factorial(i) == math.factorial(i) for i in range(20))
42+
>>> all(factorial_recursive(i) == math.factorial(i) for i in range(10))
4543
True
46-
>>> factorial(0.1)
47-
Traceback (most recent call last):
48-
...
49-
ValueError: factorial() only accepts integral values
50-
>>> factorial(-1)
44+
>>> factorial_recursive(0)
45+
1
46+
>>> factorial_recursive(5)
47+
120
48+
>>> factorial_recursive(-1)
5149
Traceback (most recent call last):
5250
...
53-
ValueError: factorial() not defined for negative values
51+
ValueError: factorial_recursive() not defined for negative values
5452
"""
55-
if not isinstance(n, int):
56-
raise ValueError("factorial() only accepts integral values")
57-
if n < 0:
58-
raise ValueError("factorial() not defined for negative values")
59-
return 1 if n in {0, 1} else n * factorial_recursive(n - 1)
53+
if number != int(number):
54+
raise ValueError(
55+
"factorial_recursive() only accepts integral values"
56+
)
57+
if number < 0:
58+
raise ValueError(
59+
"factorial_recursive() not defined for negative values"
60+
)
61+
if number in (0, 1):
62+
return 1
63+
return number * factorial_recursive(number - 1)
6064

6165

6266
if __name__ == "__main__":
6367
import doctest
64-
6568
doctest.testmod()
66-
67-
n = int(input("Enter a positive integer: ").strip() or 0)
68-
print(f"factorial{n} is {factorial(n)}")

0 commit comments

Comments
 (0)