Strategies for recursion: 1) Use it primarily on structures defined in terms of themselves. 2) Solve the easy part of your problem: this is oftentimes checking if something is null or 0, or equals some argument. 3) Figure out how you can use the recursive call to solve your problem (e.g., getting the size of a non-empty list is hard, but I know that the size of a list is 1 + the size of the rest of the list). 4) You need a base case! You can't rely on recursion forever, since you'd end up in an infinite loop. (see #2) 5) The body of your recursive method will often look like this: public ReturnType method() { if (check for base case) { return something; // or do something, if method() returns void } else { // recursive call here, possibly changing your // arguments for the next call (e.g., index numbers, // lists, etc.) } }