If you look at your code, you are never returning max, you are returning the result of your recursion unconditionally... and as the item zero is the last one verified, it will return such value.
I am not testing it, so it may miss something, but a correction could be:
public static double findMax(double[] numbers, int count){
if (count <= 0)
throw new ArgumentOutOfRangeException("count");
double current = numbers[count-1];
if(count==1){
return current;
}
else{
double recursiveMax = findMax(numbers,count-1)
if(recursiveMax>current){
return recursiveMax;
}
return current;
}
}