diff --git a/src/main/java/other/RecursionMax.java b/src/main/java/other/RecursionMax.java index 65022bf..29bab74 100644 --- a/src/main/java/other/RecursionMax.java +++ b/src/main/java/other/RecursionMax.java @@ -7,20 +7,7 @@ public class RecursionMax { public static int recursionMax(List array) { - if (array == null) { - return -1; - } - if (array.isEmpty()) { - return -1; - } - return recursionMax(array, 0, Integer.MIN_VALUE); - } - - private static int recursionMax(List array, int index, int currentMax) { - if (index == array.size()) { - return currentMax; - } - return recursionMax(array, index + 1, Math.max(currentMax, array.get(index))); + return max(array); } public static int max(List array) { diff --git a/src/test/java/other/RecursionMaxTest.java b/src/test/java/other/RecursionMaxTest.java index dd6f531..75cb27c 100644 --- a/src/test/java/other/RecursionMaxTest.java +++ b/src/test/java/other/RecursionMaxTest.java @@ -3,6 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.Tag; @@ -29,6 +30,13 @@ void shouldNotMutateInputList() { assertEquals(List.of(3, 8, 1, 5), values); } + @Test + void shouldHandleLargeListsWithoutExhaustingTheStack() { + List values = Collections.nCopies(100_000, 42); + + assertEquals(42, RecursionMax.recursionMax(values)); + } + private static Stream maxCases() { return Stream.of( Arguments.of(null, -1),