public static > int findMin(T[] arr) : Iterate through the array to find the index of the smallest element in the array. If there are two elements with the smallest value, the method should return the index of the first one. The method should run in O(n). public static > int findMinRecursive (T[] arr) : Should behave just like findMin , but should be implemented recursively. Your method may not contain any while or for loops. Hint: the public findMinRecursive method should not, itself, be recursive. Instead, write an additional private helper method with additional parameters. This private helper method should be called from findMinRecursive. This must run in O(n) time. public static > int binarySearch(T[] arr, I x) : Implement a recursive binary search to find a value equal to x. Hint: The public binary Search method, itself, should not be recursive. Instead, write an additional private helper method with additional parameters. This private helper method should be called from the public binarySearch method. This must run in O(log n) time. If the value is not found in the array, return -1. Else, return the index in the array where the value was found. To test your code, you may compile and run GenericMethodTester.java . This tester class uses the types defined in the package shapes, which includes an interface shape and concrete classes Rectangle, Square , and Circle. The Shape interface extends the comparable interface, which means that the concrete classes all need to have a compareTo method. In this case, the differnt shapes are compared according to their area. Take a look at the code for these classes to make sure you understand how everything works. There is nothing you need to change in this package - it's only here to test the GenericMethods.