I understand why you are asking this question. The idea of โโdynamic programming is to break the problem down into smaller problems, and this is the same as many recursive functions (tail or not).
These are really apples for comparing oranges that contain a lot of good answers, but here is one thing that makes you understand why it is so difficult to compare two ideas: in some languages, including Java, you technically cannot use tail recursion. As you may know, the tail recursive function does not store the result stack from its calls and uses them later. However, in Java, stack tracing is supported for each method call. This uses stack space and can overflow if it is executed too many times. Therefore, any Java methods that may appear to be tail recursive are not really.
source share