Here is a version that uses a loop.
//reverse(A,n) reverses A[0,...,n-1].
void reverse(long A[], const int n)
{
int halfn = n/2;
for(int i = 0; i < halfn; i++)
{
int k = n-i-1;
long t = A[i];
A[i] = A[k];
A[k] = t;
}
}
Here is a version that uses recursion.
//reverse(A,n) reverses A[0,...,n-1].
void reverse(long A[], const int n)
{
if(n > 1)
{
// Swap A[0] and A[n-1].
long t = A[0];
A[0] = A[n-1];
A[n-1] = t;
// Reverse the part of length n-2 in between the ends.
reverse(A+1, n-2);
}
}