From 3a060c71669be30fc106d480212879cf64a7d4d3 Mon Sep 17 00:00:00 2001 From: Jona Ocles Date: Fri, 16 Jul 2021 21:31:05 -0500 Subject: [PATCH 1/2] Adding the double factorial algorithm --- maths/double_factorial_iterative.py | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 maths/double_factorial_iterative.py diff --git a/maths/double_factorial_iterative.py b/maths/double_factorial_iterative.py new file mode 100644 index 000000000000..d1ca8aedf767 --- /dev/null +++ b/maths/double_factorial_iterative.py @@ -0,0 +1,33 @@ +def double_factorial(n: int) -> int: + """ + Compute double factorial using iterative method. + + To learn about the theory behind this algorithm: + https://en.wikipedia.org/wiki/Double_factorial + + >>> import math + >>> all(double_factorial(i) == math.prod(range(i, 0, -2)) for i in range(20)) + True + >>> double_factorial(0.1) + Traceback (most recent call last): + ... + ValueError: double_factorial() only accepts integral values + >>> double_factorial(-1) + Traceback (most recent call last): + ... + ValueError: double_factorial() not defined for negative values + """ + if not isinstance(n, int): + raise ValueError("double_factorial() only accepts integral values") + if n < 0: + raise ValueError("double_factorial() not defined for negative values") + value = 1 + for i in range(n, 0, -2): + value *= i + return value + + +if __name__ == "__main__": + import doctest + + doctest.testmod() From a582e6db64941123454b773cf593adec96a8727d Mon Sep 17 00:00:00 2001 From: Jona Ocles Date: Fri, 16 Jul 2021 21:31:05 -0500 Subject: [PATCH 2/2] Adding the double factorial algorithm --- maths/double_factorial_iterative.py | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 maths/double_factorial_iterative.py diff --git a/maths/double_factorial_iterative.py b/maths/double_factorial_iterative.py new file mode 100644 index 000000000000..b2b58aa04c28 --- /dev/null +++ b/maths/double_factorial_iterative.py @@ -0,0 +1,33 @@ +def double_factorial(num: int) -> int: + """ + Compute double factorial using iterative method. + + To learn about the theory behind this algorithm: + https://en.wikipedia.org/wiki/Double_factorial + + >>> import math + >>> all(double_factorial(i) == math.prod(range(i, 0, -2)) for i in range(20)) + True + >>> double_factorial(0.1) + Traceback (most recent call last): + ... + ValueError: double_factorial() only accepts integral values + >>> double_factorial(-1) + Traceback (most recent call last): + ... + ValueError: double_factorial() not defined for negative values + """ + if not isinstance(num, int): + raise ValueError("double_factorial() only accepts integral values") + if num < 0: + raise ValueError("double_factorial() not defined for negative values") + value = 1 + for i in range(num, 0, -2): + value *= i + return value + + +if __name__ == "__main__": + import doctest + + doctest.testmod()