// ArrayReverseRecursionDemo2.java

public class ArrayReverseRecursionDemo2
{
   public static void arrayReverse(short[] array,
                                   int beginIndex,
                                   int length)
   {
      System.out.println("arrayReverse begin: beginIndex=" + beginIndex
                                + ", length=" + length
                                + ", array=" + arrayText(array));
      if ( length > 1 )  {
         // Reverse the elements between the ends;
         arrayReverse(array, beginIndex + 1, length - 2);

         // Swap elements at ends of subarray:
         short temp = array[beginIndex];
         array[beginIndex] = array[beginIndex+length-1];
         array[beginIndex+length-1] = temp;
      }  // if
      else if ( length < 0 || length >= array.length - beginIndex )
         throw new IndexOutOfBoundsException(
                       "length=" + length + " should be in range [0, "
                                 + (array.length - beginIndex - 1)
                                 + "].");

      // Does nothing if length == 0 or length == 1.

      System.out.println("arrayReverse end:   beginIndex=" + beginIndex
                                + ", length=" + length
                                + ", array=" + arrayText(array));
   }  // method arrayReverse

   public static void main(String[] args)
   {
      short[] array = new short[] { 45, -5, 2, 7, -31};
      int beginIndex = 0;
      int length = array.length;

      System.out.println("main begin: beginIndex=" + beginIndex
                                + ", length=" + length
                                + ", array=" + arrayText(array));

      arrayReverse(array, beginIndex, length);

      System.out.println("main end:   beginIndex=" + beginIndex
                                + ", length=" + length
                                + ", array=" + arrayText(array));
   }  // method main

   private static String arrayText(short[] array)
   {
      String text = "{";
      if ( array.length > 0 )
         text = text + array[0];
      for ( int i = 1; i < array.length; i++ )
         text = text + ", " + array[i];
      text = text + "}"; 
      return text;
   }
}  // class ArrayReverseRecursionDemo2