斐波纳契序列甚至术语总和?

时间:2015-02-28 08:34:21

标签: c++ c++11

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

2 个答案:

答案 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;
}