Fibonacci序列中的每个新术语都是通过添加前两个术语生成的。从1和2开始,前10个术语将是:
1,2,3,5,8,13,21,34,55,89,......
通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和。
#include <iostream>
using namespace std;
int main() {
int i =1;
int j =2;
int k = 0;
while (k<4000000)
{
k = i +j;
i = k+j;
j=i +k;
}
cout << i <<endl;
cout << j << endl;
cout << k << endl;
return 0;
}
我是否正确地做到了这一点?为什么我得到三个不同的nu
答案 0 :(得分:0)
你想在Fibonacci序列中找到偶数项的总和,你可以使用一个使用recursion的函数,但是这会比你的代码花费更多的时间,因为递归会为每个元素计算斐波那契并赢得' t存储以前数字的Fibonacci。
但是如果你想使用你的代码,那么编译到你的程序会更快,但我的代码必须是这样的。
int even=2;
while (k<4000000 && i<4000000 && j<4000000)
{
k = i+j; //3 13 55 i,j and k computes Fibonacci
i = k+j; //5 21 89 of sequence of numbers so
j = i+k; //8 34 144 they must differ :)
if(k%2==0)even+=k;
if(i%2==0)even+=i;
if(j%2==0)even+=j;
}
if(k>=4000000 && k%2==0)even-=k;
if(j>=4000000 && j%2==0)even-=j;
if(i>=4000000 && i%2==0)even-=i;
cout<<"even sum equals"<<even;
}
答案 1 :(得分:0)
您可以使用此代码查找所需的输出
int evenFibSum(int limit)
{
if (limit < 2)
return 0;
// Initialize first two even prime numbers
// and their sum
long long int ef1 = 0, ef2 = 2;
long long int sum = ef1 + ef2;
// calculating sum of even Fibonacci value
while (ef2 <= limit)
{
// get next even value of Fibonacci sequence
long long int ef3 = 4*ef2 + ef1;
// If we go beyond limit, we break loop
if (ef3 > limit)
break;
// Move to next even number and update sum
ef1 = ef2;
ef2 = ef3;
sum += ef2;
}
return sum;
}