Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
斐波那契数-仅添加奇数-Javascript_Javascript_Math_Sum_Fibonacci - Fatal编程技术网

斐波那契数-仅添加奇数-Javascript

斐波那契数-仅添加奇数-Javascript,javascript,math,sum,fibonacci,Javascript,Math,Sum,Fibonacci,所以我试图建立一个公式,将所有奇数斐波那契数加起来,包括一个给定的数 例如: 给定的数字是4。然后结果应该是5(奇数斐波那契数为1,1,3) 目前这是我的代码: function sumFibs(num) { var sum = 0; for(i=0,j=1,k=0; k<=num;i=j,j=x,k++) { x = i + j; if (x%2 !== 0) { sum +=x; if (sum >= sum) {

所以我试图建立一个公式,将所有奇数斐波那契数加起来,包括一个给定的数

例如:

  • 给定的数字是4。然后结果应该是5(奇数斐波那契数为1,1,3)
目前这是我的代码:

function sumFibs(num) {
  var sum = 0;
  for(i=0,j=1,k=0; k<=num;i=j,j=x,k++) {
    x = i + j;
    if (x%2 !== 0) {
      sum +=x;
      if (sum >= sum) {
        break;
      }
    }
  }
  return sum;
}
sumFibs(4);
函数sumFibs(num){
var总和=0;
对于(i=0,j=1,k=0;k=sum){
打破
}
}
}
回报金额;
}
sumFibs(4);
很明显,代码不起作用。如果我删除(If sum>=sum)break语句,它将创建一个无限循环。我在另一篇文章中引用了for循环,其中给出了一个公式来创建斐波那契序列,但我很难知道在生成这个数字之后该怎么做,我该如何添加它。我尝试这样做的方法是检查模数是否不是0(这表示它是奇数)


谢谢您的帮助。

您的代码与变量名称和声明有点混淆(总是尝试使用var声明)。 这里有一个函数,可以得到您所需要的

function sumFibs(num) {
  var fib0 = 0;
  var fib1 = 1;
  var fib = 1;
  var sum = fib0;
  while ( fib <= num){
    if (fib % 2) {
        sum += fib1;
    }
    fib = fib0 + fib1;
    fib1 += fib0;
    fib0 = fib1 - fib0;
  }

  return sum;
}
函数sumFibs(num){
var fib0=0;
var fib1=1;
var-fib=1;
var总和=fib0;

虽然(fib代码有点混乱…(什么是
k
for?),元素的数量在问题定义中是不相关的,而且问题涉及将fibonacci数相加到某个值,而不是当总和超过某个值时)

解决办法可能是

var prev_fib = 0, cur_fib = 1;
var sum = 0;
while(cur_fib <= num) {
    if (cur_fib % 2 !== 0) {
        sum += cur_fib;
    }

    // Move on to next Fibonacci number
    var next_fib = cur_fib + prev_fib;
    prev_fib = cur_fib;
    cur_fib = next_fib;
}
var-prev\u-fib=0,cur\u-fib=1;
var总和=0;

而(cur_fib是实现这一点的最小方法

函数和()
{
var a=1;
var b=0;
var c=0;
var d=4;
var-temp=1;
而(c这是我的解决方案

function sumFibs(num) {

  var a = 0, b = 1, f = 1, sum = 0;
  var arr = [0, 1];

  while (f <= num) {
    if (f % 2 == 1)
      sum += f;
    arr.push(f);
    f = a + b;
    a = b; 
    b = f;       
  }

  console.log(arr);
  return sum;
}
函数sumFibs(num){
变量a=0,b=1,f=1,和=0;
var-arr=[0,1];

(f我调整了Neong的回答。它可能不像其他人那么优雅,但它很有效。最好

function sumFibs(num) {

   var a = 0, b = 1, f = 1, sum = 0;
   var arr = [0];

   while (f <= num) {
     arr.push(f);
     f = a + b;
     a = b; 
     b = f;       
     }

   var OddOnly = arr.filter(function(value, index, array){
       return value%2 == 1;
   });

   var sumArr = oddOnly.reduce(function(a,b){
       return(a+b);
   })};

   return sumArr;

   }
函数sumFibs(num){
变量a=0,b=1,f=1,和=0;
var-arr=[0];

虽然(f我有一个与列出的其他解决方案相近的解决方案,但我发现我的解决方案更具可读性,因此如下所示:

function sumOddFibs(num) {
  var sum = 2;

  var prev = 1;
  var curr = 1;
  var next = 2;

  while (next <= num) {
    prev = curr;
    curr = next;
    next = prev + curr;

    if (curr % 2 !== 0) {
      sum += curr;
    }
  }
  return sum;
}
函数sumOddFibs(num){
var总和=2;
var-prev=1;
var curr=1;
var-next=2;
while(下一步
函数sumFibs(num){
如果(num==1)
返回1;
var fib=[];
fib[0]=1;
fib[1]=1;
对于(var i=2;i
函数sumoddfibonaccidumbers(num){
//使用前两个数字初始化数组
设fib=[1,1]
//for循环根据斐波那契序列推送数字
//达到并包括num
for(设i=0;i a+b)
}

如果(sum>=sum){
总是求值为真,那一行试图做什么?哦,等等,如果是
sum>=num
-现在这将使
if
break
的无限循环更改
(i=0,j=1,k=0;
更为合理(var i=0,j=1,k=0;
否则它将伸出手来修改
i,j,k
的全局值(也
var x=i+j;
)使用常规方法计算斐波那契数列,直至达到所需的数值。然后将所有奇数相加。如果所需的数值很大,则可能会占用一些空间。虽然此代码可能会解决此问题,但一个好的答案应该解释此代码的作用以及它的帮助方式。
function sumOddFibs(num) {
  var sum = 2;

  var prev = 1;
  var curr = 1;
  var next = 2;

  while (next <= num) {
    prev = curr;
    curr = next;
    next = prev + curr;

    if (curr % 2 !== 0) {
      sum += curr;
    }
  }
  return sum;
}
function sumFibs(num) {

  if(num === 1)
    return 1;

  var fib = [];
  fib[0] =1;
  fib[1]=1;
  for(var i=2; i<=num;i++){
    fib[i]=fib[i-2]+fib[i-1];
  }

  fib = fib.filter(function(val){
    return (val % 2 !== 0) && (val<=num);
  });

  fib = fib.reduce(function(a,b){
    return a+b;
  });

  return fib;
}

sumFibs(4);
function sumOddFibonacciNumbers(num) {
    //initialize an array with the first two numbers

      let fib= [1,1]

    //for-loop to push numbers according to the Fibonacci sequence 
    // up to and including the num

      for (let i = 0; i <= num; i++){

        if (fib[i]+fib[i+1] <= num ) {
            fib.push(fib[i] + fib[i+1])
        }
    }
   
    // filter the odd numbers and then reduce to get the sum
    return fib.filter(a => a % 2 !==0).reduce((a,b) => a+b)
}