Click here to Skip to main content
Click here to Skip to main content
Alternative Tip

Tagged as

Go to top

Calculate the Factorial of an Integer in C#

, 4 Oct 2011
Rate this:
Please Sign up or sign in to vote.
It could be done using Recursive Lambda Expression, for example,class Program{ static Func 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...
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[^]
Smile | :)

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Mohammad A Rahman
Software Developer
Australia Australia
Designer and Architect.
Author of the Expert C# 5.0: with the .NET 4.5 Framework book

Comments and Discussions

 
GeneralReason for my vote of 1 advocating recursion and barely read... Pinmemberdmjm-h26-Oct-11 6:30 
GeneralI gave it 5, my reason: mind = blown. The first algorithm wa... PinmemberKenBonny17-Oct-11 21:35 
GeneralRe: Thank you very much. :) PinmemberMohammad A Rahman17-Oct-11 22:26 
GeneralReason for my vote of 5 Reason for My vote of 5 I liked it.. PinmvpRaviRanjankr12-Oct-11 11:03 
GeneralRe: Thank you very much Ravi :) PinmemberMohammad A Rahman12-Oct-11 11:54 
GeneralNooooooooooo! Please, no more recursive functions for factor... PinadminChris Maunder4-Oct-11 2:43 
Generalnice Pinmemberkiran dangar4-Oct-11 0:31 
GeneralRe: Thanks. PinmemberMohammad A Rahman4-Oct-11 0:37 
GeneralGood solution :) I would be interested to see someone do spe... PinmemberEdward Nutting3-Oct-11 20:28 
GeneralRe: Thanks Edward :) PinmemberMohammad A Rahman3-Oct-11 22:09 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web02 | 2.8.140922.1 | Last Updated 4 Oct 2011
Article Copyright 2011 by Mohammad A Rahman
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid