斐波那契数列定义为
A 0 = 1,A 1 = 1
A n = A n-1 + A n-2
您的目标是生产模式
1 2 3 5 8 13 等
迭代时,您将需要调整类似于滑动窗口的输入,然后检查是否遇到有效插入(即 < 4M 甚至)
int sum = 0;
int max = 4000000;
for( int n = 0; n < max ; n++ )
{
//only sum the even numbers
if( second % 2 == 0 ) sum += second;
//adjust
int result = first + second;
first = second;
second = result;
//test for numbers greater than max
if( result > max ) break;
}
//output
Console.WriteLine(sum); //An for all even An values
看完这个希望你能看到你遇到的一些问题。
您正在将变量设置为迭代器i
,它不会产生定义的 A n而是完全不同的东西。
firstNum = i;
secondNum = i;
此外,您只需计算一次结果。这需要在循环中完成。只计算一次基本上会一直使用静态值。
int resultNum = firstNum + secondNum;
条件语句应该测试偶数以正确添加到总和,但此代码只会测试静态值resultNum
if(resultNum == firstNum + secondNum)
此外,需要对总和进行一些检查,以便在超过最大值时突破。4M 迭代将太多。
不过,这里可以进行更多优化。查看 for 循环,很明显,虽然尚未使用,但迭代器可以是一个强大的工具。
原因是斐波那契符合“黄金比例”。
通过简单观察斐波那契数列在 3 次迭代中达到偶数,迭代器可用于跳过该数列。
double p = (1 + Math.Pow(5,.5)) / 2;
for( int n = 3, sum = 0;;n+=3)
{
double f = ( Math.Pow(p,n) - Math.Pow( 1 - p , n ) ) / Math.Pow(5,.5);
if( f > 4000000 ){
Console.WriteLine(sum);
break;
}
sum += (int)Math.Round(f);
}