Function arguments are passed by value in C, which means temporary local variables are created each time the function is called. When a function is called recursively, a new set of variables is created each time. However, recursion doesn't necessarily save storage space, since somewhere a stack of the values being processed must be maintained.