# Java – Recursion to find the 2 smallest nums in array

So I have this problem of finding the 2 smallest numbers in array but I have to use recursion (the recursion part is a part of this exercise). I start thinking how to do it and ‘the plan’ that I trying to do is like this, first of all find the smallest in the array, then mark where I found it and then to split the array in to 2 groups and search in this 2 group an eventuality take the minimum from them..

this is the code that I got this far:

public static int MinRecu2(int[] a) { if (a.length == 1) return a[0]; int min = a[0]; int min2; int mark = 0; // Find first min for (int i = 1; i < a.length; i++) { if (a[i] < min) { min = a[i]; mark = i; } } int [] help1= new int [mark+1]; int [] help2= new int [a.length-mark]; help1=Arrays.copyOfRange(a, 0, mark); help2=Arrays.copyOfRange(a, mark+1, a.length-1); // Find second min min2 = Math.min(MinRecu2(help1), MinRecu2(help2)); return min; }

I know the code not working and that the ‘recursion’ I was trying to do is bad, but that how I was trying to make my thinking to code

## Answer

This is an approach to your question.

public static int[] twoSmallest(int[] arr, int s, int e) { int[] list; if (e - s <= 3) { // maybe 2 or 3 list = new int[e - s]; for (int i = s; i < e; i++) list[i - s] = arr[i]; } else { int[] left = twoSmallest(arr, s, (s + e) / 2); int[] right = twoSmallest(arr, (s + e) / 2, e); list = new int[4]; list[0] = left[0]; list[1] = left[1]; list[2] = right[0]; list[3] = right[1]; } Arrays.sort(list); return new int[] {list[0], list[1]}; }

This function means find two smallest numbers in `arr`

in [s, e). You can call like this:

int[] result = twoSmallest(arr, 0, arr.length);