gpt4 book ai didi

c# - 在 C# 中查找斐波那契数列。 [欧拉计划练习]

转载 作者:行者123 更新时间:2023-11-30 18:50:48 25 4
gpt4 key购买 nike

我在 Project Euler 中遇到了这个问题。

问题是这样的:

斐波那契数列中的每一项都是通过添加前两项生成的。从 1 和 2 开始,前 10 项将是:1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...求序列中所有不超过四百万的偶数项之和。

到目前为止我的代码:用新代码编辑后仍然不能工作。

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);

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com