Finding Fibonacci sequence in C#. [Project Euler Exercise]

后端 未结 9 2278
后悔当初
后悔当初 2021-02-06 19:22

I\'m having some trouble with this problem in Project Euler.

Here\'s what the question asks:

Each new term in the Fibonacci sequence is generated by adding t

9条回答
  •  借酒劲吻你
    2021-02-06 19:52

    The trickier way:

    //1: Allow declaring of recursive functions
    private delegate Func FuncRec(FuncRec f);
    static Func RecFunction(Func, Func> f)
    {
        FuncRec funcRec = r => t => f(r(r))(t);
        return funcRec(funcRec);
    }
    
    //Define the factorial function
    public static readonly Func Fibonacci 
            = RecFunction(fib => n =>
                (n == 1 || n == 0)
                ? n
                : fib(n - 1) + fib(n - 2)); 
    
    //Make a "continous" version
    static IEnumerable ContinousFibonacci()
        {
            ulong count = 0;
            while(true)
            {
                ulong n = Fibonacci(count);
                count++;
                yield return n;
            }
        }
    
    //Linq result
    static void Main(string[] args)
        {
    
    
            ulong result = ContinousFibonacci()
                .TakeWhile(r => r < 4000000)
                .Where(IsEven)
                .Aggregate(0,(current, s) => (s + current));
    
            Console.WriteLine(result);
            Console.ReadLine();
    
        }
    

    ///The Functional-Style method of allowing one to create recursive functions such as above was made by Bart De Smet. See http://bartdesmet.net/blogs/bart/archive/2009/11/08/jumping-the-trampoline-in-c-stack-friendly-recursion.aspx

提交回复
热议问题