It could be done using Recursive Lambda Expression, for example,

class Program
{
static Func<int, int> Factorial = x => x < 0 ? -1 : x == 1 || x == 0 ? 1 : x * Factorial(x - 1);
static void Main(string[] args)
{
Console.WriteLine(Factorial(5));
}
}

*(The code is based on the References sites.)*From the above code,

`Factorial `

is variable of type

`Func<int,int>`

which is holding a anonymous method. So following line of code...

x => x < 0 ? -1 : x == 1 || x == 0 ? 1 : x * Factorial(x - 1)

...is the anonymous method and is equivalent to:

int Factorial( int x ){
if( x<0){
return -1;
}else if( x==1 || x==0 )
{
return 1;
}else{
return x* Factorial(x-1);
}
}

It is also possible to generate a Factorial for a number without recursion, for example, the following code block will calculate without the recursive method call:

private static int Factorial(int i)
{
int result = i < 0 ? -1 : i == 0 || i == 1 ? 1 : 1;
if (i > 0)
Enumerable.Range(1, i).ToList<int>().ForEach(element => result = result * element);
return result;
}

and also using

`Aggregate`

function of Linq:

private static int Factorial(int i)
{
return i < 0 ? -1 : i == 0 || i == 1 ? 1 : Enumerable.Range(1, i).Aggregate((counter, value) => counter * value);
}

*(initial idea to use *`Aggregate `

function found in here[^].)**References**[1]

http://msdn.microsoft.com/en-us/library/0yw3tz5k(VS.80).aspx[

^]

[2]

http://en.wikipedia.org/wiki/Recursion[

^]

[3]

Factorial Simplified using lambda[

^]

[4]

http://stackoverflow.com/questions/1426715/factorial-of-n-numbers-using-c-lambda[

^]

[5]

http://blogs.msdn.com/b/madst/archive/2007/05/11/recursive-lambda-expressions.aspx[

^]

:)