dynamic programming
Dynamic programming, or the "put shit in a table" technique, is an optimization for certain types of recurrence problems (specifically, those with overlapping subproblems). So the first thing I would say is think recursion, don't think dynamic programming at first. Once you solve the recurrence, dynamic programming is just an extra step at the end.
To solve recurrences, I like to pretend that I have an oracle that will tell me the answer to every question except for the one I want to know. When thinking about it like that, I find that the recurrence becomes clear much more quickly.