求斐波纳契数列中所有偶数项的总和

时间:2010-11-14 23:43:45

标签: java fibonacci

我无法确定以下代码为何没有产生预期的输出。相反,结果= 272似乎不正确。

/*
 *Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
 *Find the sum of all the even-valued terms in the sequence which do not exceed four million.
 */

public class Fibonacci 
{
    public static void main (String[] args)
    {
        int result = 0;
        for(int i=2;i<=33;i++)
        {
            System.out.println("i:" + fib(i)); 
            if(i % 2 == 0) //if i is even 
            {
                result += i;
                System.out.println("result:" + result); 
            }
        }
    }   
    public static long fib(int n)
    {
        if (n <= 1)
            return n;
        else
            return fib(n-1) + fib(n-2);
    }
}    

3 个答案:

答案 0 :(得分:5)

result += i;未向result添加 Fibonacci 号码。

您应该能够弄清楚如何将 Fibonacci 号码添加到result

提示:考虑制作一个存储您尝试使用的号码的变量。

答案 1 :(得分:1)

首先,你对Fib有一点不对劲。 Fib的定义可以在这里找到:http://en.wikipedia.org/wiki/Fibonacci_number

其次(i%2)对于其他所有数字(2,4,6等)都是正确的,这将使得它对于fib(2),fib(4)等是正确的。

最后,结果+ = i添加索引。你想要添加的是fib(i)的结果。因此,首先需要计算fib(i),将其存储在变量中,并检查该数是偶数还是奇数,如果是,则将变量添加到结果中。

<强> [编辑]
最后一点:当你想要将所有数字相加时,在递归中进行虚拟可能非常糟糕。如果你正在使用高数字,你甚至可能最终得到StackOverflowException,所以尝试找到一种方法总是一个好主意,这样你就不必一遍又一遍地计算相同的数字。在这个例子中,你想要对数字求和,所以不要先尝试fib(0),然后是fib(1)等等,你应该选择列表,检查路上的每个数字,然后将其添加到结果如果符合您的标准。

答案 2 :(得分:0)

嗯,这是一个很好的起点,但它是C,而不是Java。不过,它可能会有所帮助:link text