Dynamic Programming is an optimization to the recursion method. The concept stores the results of subproblems to avoid recomputation and reduces the time complexity from exponential O(2n) to linear O(n).
Here is Fibonacci on recursion.
Here is the method above is optimized using memoization.
Here is the bottom-up approach. No recursive function. The best.
You could see my article about iteration and recursion here. That is why I prefer the iteration method. Linear time is the best.