Caching is related to all the other concepts you mentioned, if you were talking about a hierarchy of concepts, caching would be the parent concept and memoization, some forms of buffering, and page files are specific forms of caching.
Memoization is storing precomputed values and then using those for looking up values rather than spending time to recalculate them. (time vs space tradeoff)
Buffering I assume you're referring to things like buffered IO, which can be used in software or hardware. In code, you can use buffered streams like in Java or C#, which will keep some amount of data in memory so programs don't have to wait for slow network/disk access. This isn't specifically caching.
Hardware buffers like in hard drives will cache a small amount of data for quick access. These are controlled by algorithms and predictions that if data was very recently used, it will probably be used again very soon.
Page files are a little different - it's a cache, but it's mainly to solve the problem of what happens when your program needs to have a lot of data in memory, but not enough memory to store that data? In environments with lots of different programs running, page files were created to solve this problem that you might have very limited RAM (shared by all apps) but significantly more storage space that could transparently be used for storing program data in addition to RAM (but significantly slower).
However, as Peter Smith mentioned, iterative vs. recursive algorithms aren't inherently memoized or anything (unless you're using constructs or languages that use transparent memoization). Recursive function calls require exponential function calls pushed onto the stack, and unless your language/compiler uses tail recursion elimination, this can be slower and also cause stack overflows.
You can memoize recursive or iterative solutions.