Many people suffer with this problem solving paradigm called Dynamic Programming, one breakthrough I have made in this topic is thinking in top-down manner rather than bottom-up.
DP can be summarized in following equation
Bruteforce + memoization = DP
The Bruteforce Part
Whenever you think about recursion you think of function getting pushed and popped in the stack, that is the proper image of recursion but not the correct way of thinking about when deriving a recursive algorithm. The way I imagine is in terms of function, where I have super parallel computer. Whenever I write a recurrence, suppose F(n-1) + F(n-2) , I imagine that the universe have branched off into two parallel universe where in one universe F(n-1) is calculated and in other F(n-2) then adding them together.
Motivation Problem
There are N students standing in a line. The first student gets 1 chocolate. The second student gets 2 chocolates. The third student however demands that he gets twice as many chocolates as the first student plus the number of chocolate that the second student got. Similarly, the fourth student said that he wanted twice the amount of chocolate that the second student got plus the amount the third student got. Thus, each student wants the amount that the previous student got plus twice the amount the student before that had got. We need to find the total number of chocolate that given to the ‘x’ th student
Lets denote F(x) as the amount of chocolate the x th students got. The x th student demands the amount of chocolate x-1 th student plus twice the chocolate of x-2 th person. In terms of function it could be defined as F(x) = F(x-1) + 2 * F(x-2) .
Boom! We are done.

We can memoize the bruteforce recursive code to reduce the time complexity from exponential to polynomial. This part is left as an exercise to the reader.
Going Further
Till now we have discussed basic recurrence. We can have more complex recurrence involving more than one parameter. Read my previous blogs and answer on Quora for further knowledge.