我无法确定以下代码为何没有产生预期的输出。相反,结果= 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);
}
}
答案 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