This is another way to do recursion:
int[] n = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; @Test public void testRecursiveSolution() { Assert.assertEquals(0, recursiveBinarySearch(1,n)); Assert.assertEquals(15, recursiveBinarySearch(16,n)); Assert.assertEquals(14, recursiveBinarySearch(15,n)); Assert.assertEquals(13, recursiveBinarySearch(14,n)); Assert.assertEquals(12, recursiveBinarySearch(13,n)); Assert.assertEquals(11, recursiveBinarySearch(12,n)); Assert.assertEquals(10, recursiveBinarySearch(11,n)); Assert.assertEquals(9, recursiveBinarySearch(10,n)); Assert.assertEquals(-1, recursiveBinarySearch(100,n)); } private int recursiveBinarySearch(int n, int[] array) { if(array.length==1) { if(array[0]==n) { return 0; } else { return -1; } } else { int mid = (array.length-1)/2; if(array[mid]==n) { return mid; } else if(array[mid]>n) { return recursiveBinarySearch(n, Arrays.copyOfRange(array, 0, mid)); } else { int returnIndex = recursiveBinarySearch(n, Arrays.copyOfRange(array, mid+1, array.length)); if(returnIndex>=0) { return returnIndex+mid+1; } else { return returnIndex; } } } }
Michele orsi
source share