我在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/