#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 5

void fill_array(int array[], int size);
void print_array(int array[], int size);
void reverse_array1(int array[], int size);     /* using for */
void reverse_array2(int * begin, int * end);    /* using while */
void reverse_array3(int * begin, int * end);    /* using recursion */
void swap(int * a, int * b);

int main()
{
  int my_arr[SIZE];
  fill_array(my_arr, SIZE);
  print_array(my_arr, SIZE);
  /* reverse_array1(my_arr, SIZE); */
  reverse_array3(my_arr, my_arr + SIZE - 1);
  print_array(my_arr, SIZE);	
  return 0;
}

void fill_array(int array[], int size)
{
  int i;
  srand(time(NULL));
  for (i = 0; i < size; i++)
    array[i] = rand() % (SIZE * SIZE);
}

void print_array(int array[], int size)
{
  int i;
  for (i = 0; i < size; i++)
    printf("%d ", array[i]);
  printf("\n");
}

void reverse_array1(int array[], int size)
{
  int i;
  for (i = 0; i < size/2; i++)
    swap(&array[i], &array[size - 1 - i]);
}

void reverse_array2(int * begin, int * end)
{
  while (begin < end) {
    swap(begin, end);
    begin++;
    end--;
  }
}

void reverse_array3(int * begin, int * end)
{
  if (begin < end) {
    swap(begin, end);
    reverse_array3(begin + 1, end - 1);
  }
}

void swap (int * q,int * p)
{
  int temp = *p;
  *p = *q; 
  *q = temp;
}
