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.
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.