Efficiency

Recursion is based upon calling the same function over and over, whereas iteration simply `jumps back' to the beginning of the loop. A function is often more expensive than a jump. Overheads that may be associated with a function call are:

Space: Every invocation of a function call may require space for parameters and local variables. A recursive algorithm may need space proportional to the number of nested calls.

Time: Allocating and later releasing local memory, copying values into the local memory for the parameters, branching to/returning from the function, all contribute to the time overhead.

Fortunately, compilers have become extremely clever nowadays, and, if you follow certain guidelines (see later), they are able to produce machine code that incurs minimal or no overhead.