solving recursive problems: cases 1) base case - doesn't call itself 2) recursive case calls a "lesser" version of itself (gets closer to the base case)