我在Euler项目中遇到了一些问题。

问题是这样的:

斐波那契数列中的每个新项都是通过将前两个项相加而生成的。从1和2开始,前10个术语将是:
1,2,3,5,8,13,21,34,55,89,...
找出序列中所有不超过400万的偶数项之和。

到目前为止,我的代码:仍然无法使用新代码进行编辑。

static void Main(string[] args)
{
    int a = 1;
    int b = 2;
    int Container = 0;
    int Sum = 0;

    while (b < 4000000)
    {
        if (a % 2 == 0)
        {
            Container += a;
        }

        Sum = a + b;
        a = b;
        b = Sum;
    }

    Container += b;

    Console.WriteLine(Container.ToString());
    Console.ReadLine();
}

最佳答案

C#中有趣的功能之一是“ yield”关键字,它对于这种事情非常有用:

IEnumerable<int> Fibonacci()
{
   int n1 = 0;
   int n2 = 1;

   yield return 1;
   while (true)
   {
      int n = n1 + n2;
      n1 = n2;
      n2 = n;
      yield return n;
   }
}

long result=0;

foreach (int i in Fibonacci().TakeWhile(i => i<4000000).Where(i => i % 2 == 0))
{
    result+=i;
}
Console.WriteLine(result);


此处的“传统”递归斐波那契实现是有问题的,因为它会丢弃到最后一个请求术语的所有工作。您将不得不在一个循环中一遍又一遍地调用这样的函数,这将重复很多工作,或者您可以从该实现开始,并向递归函数添加一个参数以建立所需的总和结果,作为最终的斐波那契项计算。我更喜欢它,因为它仍然是通用的斐波那契数列的核心,而不是您必须重写或专门化的数列。

另一种方法是在传统实现中使用事件(代理)在每个术语完成时调用单独的方法,但是由于我仍然更喜欢迭代器方法,因此我将委托选项作为练习供读者使用。

关于c# - 在C#中查找斐波那契序列。 [欧拉计划练习],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1580985/

10-13 06:55