File tree 1 file changed +31
-0
lines changed
1 file changed +31
-0
lines changed Original file line number Diff line number Diff line change
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 ()
You can’t perform that action at this time.
0 commit comments