C 斐波那契数,求其值不超过四百万的偶数项之和(欧拉项目)

C 斐波那契数,求其值不超过四百万的偶数项之和(欧拉项目),c,fibonacci,C,Fibonacci,今天我要解决的一个问题是: 斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是: 1、2、3、5、8、13、21、34、55、89 通过考虑Fibonacci序列中值不超过400万的项,求偶数值项之和 这是Project Euler上的一个问题,以下是链接: 我不知道我的代码出了什么问题。我认为我的逻辑是正确的,但我仍然得到了错误的答案。 我已经测试了n首先,在你的问题中,你说“其值不超过400万”,因为4M不超过4M,所以应该是“我知道我的错误在哪里。这个问题

今天我要解决的一个问题是:

斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是:

1、2、3、5、8、13、21、34、55、89

通过考虑Fibonacci序列中值不超过400万的项,求偶数值项之和

这是Project Euler上的一个问题,以下是链接:

我不知道我的代码出了什么问题。我认为我的逻辑是正确的,但我仍然得到了错误的答案。
我已经测试了n首先,在你的问题中,你说“其值不超过400万”,因为4M不超过4M,所以应该是“我知道我的错误在哪里。这个问题需要Fib(I)的和%2==0,但我的代码正在尝试找出第2个第4个第6个的和…我对问题的理解是错误的。

您应该对偶数值项求和,但看起来好像是每隔一个项求和。请保持简单。递归是过死的,
long
是不必要的。一个非常简单的问题。步骤1)只保留当前值计算值和以前的计算值。2)计算最新值3)计算每个值时,检查其是否为“偶数”5)如果为“偶数”,则将其相加4)将当前计算值移动到以前的计算值,循环到2当在windows环境中放置在堆栈上时,将出现问题(其中max stack仅为4k作为您的错误示例,Fib(5)=8,您没有添加它。我不知道您是如何假定其他值是正确的。您设置了第一个位置,然后将整个数组设置为
0
。可能删除该循环,只需说
int fibs[4000000]={0}
,没有真正查看所有代码,但我知道我的错误在哪里。问题需要Fib(i)%2==0的和,
#include <stdio.h>

long long int Fib(int n){

    if (n == 1){

        return 1;
    }
    else if (n == 2){

        return 2;
    }
    else {
        return (Fib(n - 1) + Fib(n - 2));
    }
}

int main()
{
    int i;

    long long int sum=0;

    for(i=2;Fib(i)<4000000;i=i+2){

        sum+= Fib(i);
    }
    printf("%lld",sum);

    return 0;
}
 if(Fib(i) % 2 == 0)
     sum += Fib(i);
    int main(){

    int fibbs[4000000]; // it will never be bigger than this
    int sum = 0;
    int numValues = 0; // counts the number of values in the vector

   // initialize vector to 0's , probably not necessary
    for(i = 0; i < 4000000; i++){
        fibs[i] = 0;
    }

    // first positions of fibonacci
    fibs[0] = 1;
    fibs[1] = 1;
    fibs[2] = 2;



    // fill the vector with all the fibonacci numbers until 4M
    int i = 3;
    while(1){
        fibs[i] = fibs[i-1] + fibs[i-2];
        if(fibs[i] > 4000000){
            fibs[i] = 0; // it is already bigger than 4M , can't sum this one
            numValues = i-1; // save the number of values in the vector
            break;
        }
        i++;
    }

    for(i = 0; i <= numValues; i++){
        if(fibs[i] % 2 == 0 ){
            sum += fibs[i];
        }
    }

    printf("Sum is: %d\n", sum);
    return 0;

    }