import java.util.*;
public class ArrayList5 {
    static int max(ArrayList list) { // to be completed
        if (list.size() == 0) {
            return 0;
        }
        else
        {
            int first = (Integer) list.get(0);
            list.remove(0);
            if (first > max(new ArrayList(list)))
            {
                return first;
            } 
            else 
            {
                return max(list);
            }
        }
    }
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList();
        Collections.addAll(list, 4, 5, 3, 2, 3, 1, 3);
        // int t=Console.readInt("Enter Target:");
        int res1 = max(new ArrayList(list));
        System.out.println("max=" + res1);
    }
}
I don't understand why the max(new ArrayList(list))) part is required. Why does it have to create a new one and why can't it continue to work with the one list? 
Also why doesn't it get caught in a loop (it's recursion so it will keep sending up a new list so I don't understand why 'first' isn't going to be 4 every time)?
 
     
     
    