From 9855e0861de730862a33b57fadf2e01e0bc97296 Mon Sep 17 00:00:00 2001 From: Bhumit267 Date: Thu, 5 Nov 2026 18:22:35 +0530 Subject: [PATCH] fix(maths): prevent infinite recursion on negative inputs in BinomialCoefficient --- .../com/thealgorithms/maths/BinomialCoefficient.java | 5 +++++ .../thealgorithms/maths/BinomialCoefficientTest.java | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/main/java/com/thealgorithms/maths/BinomialCoefficient.java b/src/main/java/com/thealgorithms/maths/BinomialCoefficient.java index 1de39adbc18a..a7caf7efa44f 100644 --- a/src/main/java/com/thealgorithms/maths/BinomialCoefficient.java +++ b/src/main/java/com/thealgorithms/maths/BinomialCoefficient.java @@ -21,9 +21,14 @@ private BinomialCoefficient() { * @param numberOfObjects Number of objects to be chosen from total_objects * @return number of ways in which no_of_objects objects can be chosen from total_objects * objects + * @throws IllegalArgumentException if totalObjects or numberOfObjects is negative */ public static int binomialCoefficient(int totalObjects, int numberOfObjects) { + if (totalObjects < 0 || numberOfObjects < 0) { + throw new IllegalArgumentException("Arguments must be non-negative."); + } + // Base Case if (numberOfObjects > totalObjects) { return 0; diff --git a/src/test/java/com/thealgorithms/maths/BinomialCoefficientTest.java b/src/test/java/com/thealgorithms/maths/BinomialCoefficientTest.java index 58cfcbad57fb..29081f01b26a 100644 --- a/src/test/java/com/thealgorithms/maths/BinomialCoefficientTest.java +++ b/src/test/java/com/thealgorithms/maths/BinomialCoefficientTest.java @@ -1,6 +1,7 @@ package com.thealgorithms.maths; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; @@ -12,5 +13,14 @@ void testBinomialCoefficient() { assertEquals(792, BinomialCoefficient.binomialCoefficient(12, 5)); assertEquals(84, BinomialCoefficient.binomialCoefficient(9, 3)); assertEquals(1, BinomialCoefficient.binomialCoefficient(17, 17)); + assertEquals(0, BinomialCoefficient.binomialCoefficient(5, 6)); + assertEquals(1, BinomialCoefficient.binomialCoefficient(0, 0)); + } + + @Test + void testNegativeInputs() { + assertThrows(IllegalArgumentException.class, () -> BinomialCoefficient.binomialCoefficient(5, -1)); + assertThrows(IllegalArgumentException.class, () -> BinomialCoefficient.binomialCoefficient(-1, 5)); + assertThrows(IllegalArgumentException.class, () -> BinomialCoefficient.binomialCoefficient(-5, -2)); } }