In fact, it is called only 4 times.
The recursion rule, as you stated: if n == 1, return ar [0] else will return a maximum of n-1 elements.
So, the else part is called for 5, 4, 3, and 2.
However, this recursion is not good enough. Since your function is called n-1 times, you only pay recursion overhead (like a stack), but you don't get the advantage of iteration.
If you really need recursion for this task, try splitting the array by 2 and passing each half of the recursive function.
simple pseudo-code (it is incorrect to process odd numbers):
int max(int arr[], int n) { if (n<=1) return arr[0]; return MAX(max(arr, n/2), max(arr+n/2, n/2)); }
eyalm source share