Memoization is definitely a powerful technique.
But Dynamic Programming is slightly better IMO, since it does not involve the memory strain (in a recursive program, the parameters occupy memory and this memory increases as we go deeper into the recursion). But speed-wise, both are pretty equal.
But definitely memoization is a lot more straight-forward than Dynamic Programming.
My question: Is it somehow possible to use memoization without the memory constraint ?
4
You can reduce the amount of memory used for memoization by using a “Least Recently Used” cache (with limited maximum size) for the memoized values. How well this works depends heavily on the problem, the function you are going to memoize and the choice of the cache size. But I guess for a problem where DP works well, there is a good chance that function values needed in a first stage of a calculation won’t be needed any more some stages later, so the LRU strategy will free the resources for these values automatically.