Skip to content

Commit 5957eab

Browse files
authored
Adding the double factorial algorithm (TheAlgorithms#4550)
1 parent da71184 commit 5957eab

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

maths/double_factorial_recursive.py

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
def double_factorial(n: int) -> int:
2+
"""
3+
Compute double factorial using recursive method.
4+
Recursion can be costly for large numbers.
5+
6+
To learn about the theory behind this algorithm:
7+
https://en.wikipedia.org/wiki/Double_factorial
8+
9+
>>> import math
10+
>>> all(double_factorial(i) == math.prod(range(i, 0, -2)) for i in range(20))
11+
True
12+
>>> double_factorial(0.1)
13+
Traceback (most recent call last):
14+
...
15+
ValueError: double_factorial() only accepts integral values
16+
>>> double_factorial(-1)
17+
Traceback (most recent call last):
18+
...
19+
ValueError: double_factorial() not defined for negative values
20+
"""
21+
if not isinstance(n, int):
22+
raise ValueError("double_factorial() only accepts integral values")
23+
if n < 0:
24+
raise ValueError("double_factorial() not defined for negative values")
25+
return 1 if n <= 1 else n * double_factorial(n - 2)
26+
27+
28+
if __name__ == "__main__":
29+
import doctest
30+
31+
doctest.testmod()

0 commit comments

Comments
 (0)