From 042ac0b781a9da7699bdd432b7c36c2427eb7385 Mon Sep 17 00:00:00 2001 From: sayan som Date: Mon, 19 Jan 2026 23:40:15 +0530 Subject: [PATCH 1/2] Add recursive factorial implementation --- maths/factorial.py | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/maths/factorial.py b/maths/factorial.py index ba61447c7564..e482f60c3225 100644 --- a/maths/factorial.py +++ b/maths/factorial.py @@ -34,35 +34,35 @@ def factorial(number: int) -> int: value *= i return value - -def factorial_recursive(n: int) -> int: +def factorial_recursive(number: int) -> int: """ - Calculate the factorial of a positive integer - https://en.wikipedia.org/wiki/Factorial + Calculate the factorial of a number using recursion. >>> import math - >>> all(factorial(i) == math.factorial(i) for i in range(20)) + >>> all(factorial_recursive(i) == math.factorial(i) for i in range(10)) True - >>> factorial(0.1) - Traceback (most recent call last): - ... - ValueError: factorial() only accepts integral values - >>> factorial(-1) + >>> factorial_recursive(0) + 1 + >>> factorial_recursive(5) + 120 + >>> factorial_recursive(-1) Traceback (most recent call last): ... - ValueError: factorial() not defined for negative values + ValueError: factorial_recursive() not defined for negative values """ - if not isinstance(n, int): - raise ValueError("factorial() only accepts integral values") - if n < 0: - raise ValueError("factorial() not defined for negative values") - return 1 if n in {0, 1} else n * factorial_recursive(n - 1) + if number != int(number): + raise ValueError( + "factorial_recursive() only accepts integral values" + ) + if number < 0: + raise ValueError( + "factorial_recursive() not defined for negative values" + ) + if number in (0, 1): + return 1 + return number * factorial_recursive(number - 1) if __name__ == "__main__": import doctest - doctest.testmod() - - n = int(input("Enter a positive integer: ").strip() or 0) - print(f"factorial{n} is {factorial(n)}") From b0120ab9400cab37c7aec93d6282393375dd2d92 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 19 Jan 2026 18:11:16 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/factorial.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/maths/factorial.py b/maths/factorial.py index e482f60c3225..d29b4c581f43 100644 --- a/maths/factorial.py +++ b/maths/factorial.py @@ -34,6 +34,7 @@ def factorial(number: int) -> int: value *= i return value + def factorial_recursive(number: int) -> int: """ Calculate the factorial of a number using recursion. @@ -51,13 +52,9 @@ def factorial_recursive(number: int) -> int: ValueError: factorial_recursive() not defined for negative values """ if number != int(number): - raise ValueError( - "factorial_recursive() only accepts integral values" - ) + raise ValueError("factorial_recursive() only accepts integral values") if number < 0: - raise ValueError( - "factorial_recursive() not defined for negative values" - ) + raise ValueError("factorial_recursive() not defined for negative values") if number in (0, 1): return 1 return number * factorial_recursive(number - 1) @@ -65,4 +62,5 @@ def factorial_recursive(number: int) -> int: if __name__ == "__main__": import doctest + doctest.testmod()