Recursion is nothing more than a disguised loop. Anything you can express recursively you can also express iteratively.
Two factorials
Code:
#include <stdio.h>
int f1 ( int n ) {
int i, res = 1;
for ( i = 1 ; i <= n ; i++ ) res *= i;
return res;
}
int f2 ( int n ) {
if ( n == 1 ) return 1;
else return n * f2(n-1);
}
int main ( void ) {
printf( "%d %d\n", f1(8), f2(8) );
return 0;
}
This isn't to say that some recursive functions can be easily written as a loop.
The towers of Hanoi problem is very neatly written in just a few lines recursively, but takes a bit more effort to write it out in a loop.
Quicksort for example is often expressed in recursive terms, but the most efficient implementations are usually iterative.
Only the most perverse coder would have a recursive strlen() function for example