Tyl*_*ler 3 java math fibonacci
问题是...
Fibonacci序列中的每个新术语都是通过添加前两个术语生成的.从1和2开始,前10个术语将是:
1,2,3,5,8,13,21,34,55,89 ......
通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和.
我已经制作了一个应该执行此操作的代码,粘贴如下:
public class Main {
public static void main(String[] args) {
// Setting up the variables. sumF3 will be printed at the end.
int sumF1 = 1;
int sumF2 = 2;
int sumF3 = 0;
// If loops to cancel out the odd numbers, but let them be added to sumF2 etc anyway.
while(4000000 > sumF1) {
if (sumF1 % 2 == 0) {
sumF3 += sumF1;
}
if (sumF2 % 2 == 0) {
sumF3 += sumF2;
}
// Normal fibonacci sequence.
sumF1 += sumF1 + sumF2;
sumF2 += sumF1 + sumF2;
}
System.out.println(sumF3);
}
}
Run Code Online (Sandbox Code Playgroud)
我首先用两个if循环过滤掉奇数,然后将它添加到sumF3.它会继续这样做,加上sumF3直到它达到400万以下.当while循环停止时,它应该打印出'4613732',但它打印出不同的东西(4194302).我觉得这里有一个逻辑缺陷.
你实际上只犯了一个小错误.线条
sumF1 += sumF1 + sumF2;
sumF2 += sumF1 + sumF2;
Run Code Online (Sandbox Code Playgroud)
应该
sumF1 = sumF1 + sumF2;
sumF2 = sumF1 + sumF2;
Run Code Online (Sandbox Code Playgroud)
注意=而不是+=.
您在斐波那契序列中的表达式不正确.您正在执行以下操作:
// Normal fibonacci sequence.
sumF1 += sumF1 + sumF2;
sumF2 += sumF1 + sumF2;
Run Code Online (Sandbox Code Playgroud)
这基本上是这样做的:sumF1 = sumF1 + sumF1 + sumF2,sumF2 = sumF2 + sumF1 + sumF2.
如果将表达式更改为以下内容,则应获得正确的答案:
// Normal fibonacci sequence.
sumF1 += sumF2;
sumF2 += sumF1;
Run Code Online (Sandbox Code Playgroud)
+ =运算符将表达式的值添加到变量的值,并将结果赋给变量.您在混合中添加了一个额外的变量,它会抛出您的结果.