Answer to Question 22A-5

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);
  }
}