Skip to content

Commit 9855e08

Browse files
committed
fix(maths): prevent infinite recursion on negative inputs in BinomialCoefficient
1 parent 4f535f5 commit 9855e08

2 files changed

Lines changed: 15 additions & 0 deletions

File tree

‎src/main/java/com/thealgorithms/maths/BinomialCoefficient.java‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,14 @@ private BinomialCoefficient() {
2121
* @param numberOfObjects Number of objects to be chosen from total_objects
2222
* @return number of ways in which no_of_objects objects can be chosen from total_objects
2323
* objects
24+
* @throws IllegalArgumentException if totalObjects or numberOfObjects is negative
2425
*/
2526

2627
public static int binomialCoefficient(int totalObjects, int numberOfObjects) {
28+
if (totalObjects < 0 || numberOfObjects < 0) {
29+
throw new IllegalArgumentException("Arguments must be non-negative.");
30+
}
31+
2732
// Base Case
2833
if (numberOfObjects > totalObjects) {
2934
return 0;

‎src/test/java/com/thealgorithms/maths/BinomialCoefficientTest.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.thealgorithms.maths;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertThrows;
45

56
import org.junit.jupiter.api.Test;
67

@@ -12,5 +13,14 @@ void testBinomialCoefficient() {
1213
assertEquals(792, BinomialCoefficient.binomialCoefficient(12, 5));
1314
assertEquals(84, BinomialCoefficient.binomialCoefficient(9, 3));
1415
assertEquals(1, BinomialCoefficient.binomialCoefficient(17, 17));
16+
assertEquals(0, BinomialCoefficient.binomialCoefficient(5, 6));
17+
assertEquals(1, BinomialCoefficient.binomialCoefficient(0, 0));
18+
}
19+
20+
@Test
21+
void testNegativeInputs() {
22+
assertThrows(IllegalArgumentException.class, () -> BinomialCoefficient.binomialCoefficient(5, -1));
23+
assertThrows(IllegalArgumentException.class, () -> BinomialCoefficient.binomialCoefficient(-1, 5));
24+
assertThrows(IllegalArgumentException.class, () -> BinomialCoefficient.binomialCoefficient(-5, -2));
1525
}
1626
}

0 commit comments

Comments
 (0)