【问题标题】:Find the sum of all even-valued terms in the Fibonacci Sequence求斐波那契数列中所有偶数项的总和
【发布时间】:2010-11-14 23:43:44
【问题描述】:

我无法弄清楚为什么以下代码没有产生预期的输出。相反,结果 = 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);
    }
}    

【问题讨论】:

    标签: java fibonacci


    【解决方案1】:

    result += i; 行没有向result 添加斐波那契数

    您应该能够弄清楚如何将一个斐波那契数添加到result

    提示:考虑创建一个变量来存储您尝试使用的数字。

    【讨论】:

    • 另外,if(i % 2 == 0) 行不测试 Fibonacci 数是否为偶数。
    • @rampion:是的;那个也是。 (我以为他实际上甚至想要indicies
    【解决方案2】:

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

    其次 (i % 2) 对所有其他数字(2、4、6 等)都成立,这将让人认为 fib(2)、fib(4) 等都是成立的。

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

    [编辑]
    最后一点:当您不想将所有数字相加时,递归执行 fib 可能非常糟糕。如果您正在处理大量数字,您甚至可能会遇到 StackOverflowException,因此尝试找出一种方法总是一个好主意,这样您就不必一遍又一遍地计算相同的数字。在这个例子中,你想对数字求和,所以不要先尝试 fib(0),然后再尝试 fib(1) 等等,你应该使用列表,检查途中的每个数字,然后将其添加到如果它符合您的条件,则结果。

    【讨论】:

    • 它实际上是对项目欧拉的练习,我能够弄清楚。不过谢谢
    • @SLaks 好点。试图编辑,但我担心为时已晚:-P
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      相关资源
      最近更新 更多