【发布时间】:2013-10-15 15:48:52
【问题描述】:
欧拉计划问题 2。
斐波那契数列中的每个新项都是通过添加前两项来生成的。从 1 和 2 开始,前 10 个术语将是:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
通过考虑斐波那契数列中值不超过四百万的项,求偶数项之和。
我的解决方案:
int firstNum = 1;
int secondNum = 2;
int resultNum = firstNum + secondNum;
int sum = 0;
for (int i = 0; i < 4000000; i++)
{
firstNum = i;
secondNum = i;
if(resultNum == firstNum + secondNum)
{
sum += resultNum;
Console.WriteLine(sum);
}
}
为什么这不正确,您能引导我进入正确的思维方式吗?
【问题讨论】:
-
只调试你的代码。当你看到它在前几个循环中做了什么时,我认为应该很清楚。
-
您的
firstNum和secondNum在每种情况下都只是i。resultNum将始终为 3。因此,您正在寻找i的任何整数值,使得i + i为 3。这不会产生很多答案。您的代码目前根本不产生斐波那契数... -
您的代码没有创建斐波那契数列。先把那部分弄清楚。
-
@AdamV 问题描述具体指定从1,2开始。
-
@RealityDysfunction 斐波那契实际上是一个使用递归的非常糟糕的问题。除非您缓存这些值或使用动态编程,否则您最终会一遍又一遍地重新计算相同的值,从而将可能是线性的算法变成指数的算法。计算高达 400 万的值实际上已经足够大,以至于幼稚的递归实现很难计算出结果。