I have always felt that dynamic programming is only confusing because of the name. The concept of caching previously calculated values in order to save time by avoiding recalculation (at the cost of using more space) is intuitive. What am I missing?
Formulating the recursion and caching strategy is the difficult part and it is non-trivial to identify at times. For example, this is simple to explain in the abstract case but what about a concrete case like text justification or edit distance? The hardest part is getting to the recurrence relation, and then implementing it.
I would pretty much never start an interview response with a recursive solution in an interview because I pretty much never end up with a recursive solution in my work. I have very rarely been asked to do something recursively having already done it iteratively.