#include <iostream>

//  factorial operation
//   fac(N) = fac(N-1) * N if N > 1
//   fac(1) = 1

// recursive version of factorial
int fac(int n)
{
 int temp;

 cout << "before recursive call: " << n << endl;

 if (n > 1)
    temp = fac(n-1) * n;
 else
    temp = 1;

 cout << "after recursive call: " << n << ", " << temp << endl;

 return temp;
}

// non-recursive version of factorial
int facNR(int n)
{
 int result = 1;
 int i;

 for (i=1; i<=n; i++)
    result = result * i;

 return result;
}

int main()
{
 int i;
 int rval, nrval;

 for (i = 1; i < 10; i++)
   {
    rval = fac(i);
    nrval = facNR(i);

    cout << i << ": factorial R: " << rval
              << ", factorial NR: " << nrval << endl << endl ;
   }

}