A function reuses the result(previously computed value) when it's called with the same value twice.
By default, no. You can memoize a function, so that it reuses already computed results, but that requires special intervention by the programmer (or possibly the compiler, but I'm not aware of any C compiler that does that).
It would be insanely expensive and wasteful to cache all computed values, since most functions aren't called repeatedly with the same arguments. And it is incredibly hard to find a good heuristic which calls are worth caching. Therefore such things are left to the programmer who hopefully has more knowledge of what functions it is worth to cache.