これって再帰?
--->
long factorial( long x ) {
 if( x>1 ) {
  return ( x * factorial ( x-1 ) );
 } else {
  return ( x );
 }
}
<---
n>1のとき
n! = n * (n-1)!
n=1のとき
n! = n ( = 1 )
が基本的な考え方になっています
もっとも
--->
long factorial( long x ) {
 long i;
 long ret=1;
 for( i=1; i<=x; i++ ) {
  ret *= i;
 }
 return ret;
}
<---
でもいいような気がするが。