I will tell you some points.
-
First increase you thinking abilities. (Don't take this, in wrong way, my mean to say is , solve problem related to Recursion and after solving problem through recursion , try to solve it iterative way (If it is possible, but try) , How it will help? you will understand. ) and if you have practiced already, jump to second step.
-
Then start solving Classical Dynamic Programming Question.
-
- Knapsack.
- LCS.
- Matrix Chain Multipication .
- Coin Change.
- LIS.
- Edit Distance.
- Balanced Partition.
- Optimal Strategy for a Game.
-
Now start solving DP problem on various Online Judges.(Spoj, Codeforces, hackerrank, codechef etc.)
-
If you get stuck somewhere and you don't find any solution than read other users’ solution and try to understand them. It will also increase your thinking abilities, you will get to know that (ohh yeah it can also be solved this way.)
-
Last but not least, DP is perfect example of "Practice makes a man Perfect." The more you practice , the more you learn.
Now, you are still thinking that why I focus more on recursion, some times thinking a recursive solution is more easy than iterative.(That's my point of view , may be for you its easy to solve through iterative.)
Some reference for practice:-
Dynamic Programming - From Novice to Advanced
Problem classifier for SPOJ.pl
700 problems to understand you complete algorithmic programming.
Tutorial for Dynamic Programming
Dynamic Programming - I - Arjit Srivastava
Hope this will help you. :) Have fun. :)