When designing such a generic algorithm, you should think about corner cases. For example, what should the function do if passed an empty list? An "easy" answer is just to reject such a case using an exception.
A stylistic note is that the name of the function is ambiguous, and the parameter name "size" is ambiguous (as Java arrays know their size, it appears redundant). Most programmers are used to the convention that searches start from the beginning. Thus, I would propose a function signature(s) like the following:
public class Example
public static int indexOfLargest(int  array, int startIndex)
public static int indexOfLargest(int  array)
return indexOfLargest(array, 0);
The most general function is indexOfLargest(int  array, int begin, int end), if you really want maximum flexibility.
During each call, you return either size or size-1. Thus, it is not possible for your implementation to return an early index in the array - regardless of the recursion.