Java, recursively reverse an array
void reverseArray(int[] x){ reverse(x, 0, x.length -1);}void reverse(int[] x, int i, int j){ if(i<j){//Swap int tmp = x[i]; x[i] = x[j]; x[j] = tmp; reverse(x, ++i, --j);//Recursive } }
Test:
int[] s = new int[]{1,2,3,4,5};reverseArray(s);System.out.println(Arrays.toString(s));//"5,4,3,2,1"
Recursive, O(n), no temporary Array needed.
Because this is your homework, I suggest an example :
Given sequence : 1 2 3 4 5 6 7 8 9 10
You can change to : 10 2 3 4 5 6 7 8 9 1
After that: 10 9 3 4 5 6 7 8 2 1
.....
As you see, step by step, the sequence is "better" and the problem is "smaller". So, the problem you should solve to complete is :
1) How to apply recursive call for this method. for the original, the method is : reverse(int[] a)
. so, after first step, you should create array b from a[2] --> a[n-1]
. and using reverse(int[] b)`.
2) after reverse b
, what should we do to reverse a ? Assign values of b again back to a.
3) stop condition : what stop condition ? You see that elements of array b less than elements of array a. So, to which step, we should stop ?
Hope this help :)