Javascript 斐波那契序列(JS)-偶数之和

Javascript 斐波那契序列(JS)-偶数之和,javascript,fibonacci,Javascript,Fibonacci,我开始了欧拉计划。我在第二道题上,用这段代码计算出了4百万的偶数斐波那契数之和。这段代码似乎和我想要的差不多。运行代码时,我确实看到了正确的总和。唯一让我感到困惑的是结果中显示的最后一个数字。这就是它所显示的: JS代码: var previous = 0; var current = 1; var sum = 0; var next; for(i = 1; i < 100; i++){ next = current + previous; prev

我开始了欧拉计划。我在第二道题上,用这段代码计算出了4百万的偶数斐波那契数之和。这段代码似乎和我想要的差不多。运行代码时,我确实看到了正确的总和。唯一让我感到困惑的是结果中显示的最后一个数字。这就是它所显示的:

JS代码:

var previous = 0;
var current = 1;
var sum = 0;
var next;

   for(i = 1; i < 100; i++){
        next = current + previous;
        previous = current;
        current = next; 
        if(current % 2 === 0 && current < 4000000) {
            sum += current;
        console.log(sum);
        }
   }

让我来详细分析一下:

为什么会出现这种情况? 在控制台上,您将看到执行的任何表达式的结果。如果执行一个代码块,您将看到在该块中执行的最后一个表达式。与直觉相反,在这种情况下,它是
current=next
的结果,因为if语句不是上次通过for循环运行的

为什么next等于354224848179262000000?
第一百个斐波那契数是354224848179261915075。但是,当数字超过某一点并开始假设数字的所有下半部分都是零时,JavaScript会失去精度。有关移动详细信息,请参见此问题:。

您可以使用此代码解决问题,使用此代码,算法不需要经过100次迭代才能得到答案(是对您的修改,当您使用当前变量进行迭代时,差异在for循环中):

函数sumFibs(num){
设previous=0;
设电流=1;
设和=0;
让我们下一步;

for(current;current那不是Java。
Java!=JavaScript
。你在哪个浏览器中?你想要的号码就是我得到的号码…有没有办法修复它,最后一个号码就是“4613732”?或者这很好?从技术上讲,代码只是用来查找答案的,但我希望答案是最终结果。这很好。如果您在控制台之外运行此代码,您将永远看不到最终数字。这只是任何人的选择,只要您输入任何代码,控制台就会显示结果。您可以放心地忽略它。如果你在编写可重用代码,那么整个过程就是一个函数,每次进入If块时,你都需要跟踪最佳答案。然后,在for循环完成后,你只需返回你一直跟踪的最佳答案。另一种形式可能是带有while循环和相同的算法顺序.
2
10
44
188
798
3382
14328
60696
257114
1089154
4613732 (this is the number i was trying to get)
=> 354224848179262000000 (confused as to why this number shows up and what it represents)
 function sumFibs(num) {
  let previous = 0;
  let current = 1;
  let sum = 0;
  let next;

  for(current; current <= num;){
    next = current + previous;
    previous = current;

    if(current % 2 === 0) {
      sum += current;
    }

    current = next;
  }

  return sum;
}

sumFibs(4000000); // return 4613732