Как я могу изменить свой метод limit () на сумму, пока не получу запрошенный номер? - PullRequest
0 голосов
/ 01 мая 2020

https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/sum-all-odd-fibonacci-numbers

Мне нужно выполнить задание, поэтому я сделал функцию суммирования рядов Фибоначчи. Но мне нужно суммировать, пока я не получу номер, который запрашивается программой. Можете ли вы сделать какие-либо предложения? Пожалуйста, исправьте мой engli sh, если это необходимо, и помогите мне получить ответ для моего кода.

sumFibs (1000) должен вернуть 1785. sumFibs (4000000) должен вернуть 4613732. sumFibs (75024) должен вернуть 60696. sumFibs (75025) должен вернуть 135721.

function sumFibs(num) {

let numArr=[];

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

   numArr.push(i)

   }  
console.log()
let oddNumArr=numArr.filter(numbers=>numbers % 2 !== 0) 

oddNumArr.unshift(1)

let reducedArr=oddNumArr.reduce((a, b) => a + b, 0)

return reducedArr;
console.log(reducedArr)

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Вот оптимизированный код, который вы хотите, наконец.

function sumFibs(num) {
  let m = 0;
  let n = 1;
  let count = 0;

  while (n < num) {
    [n, m] = [n+m, n];

    if (m%2 !== 0) {
      count+=m;
    }
  }
  return count;
}
console.log(sumFibs(1000));
console.log(sumFibs(4000000));
console.log(sumFibs(75024));
console.log(sumFibs(75025));

Если вам нужна функция уменьшения , вы должны go пропустить чуть больше строк кода.

Вот код, который использует уменьшение функция

function sumFibs(num) {
  let lastFib=0;
  let fibonacci=[0,1]; 
  let i=0;
  while(lastFib<num){
      lastFib=fibonacci[i]+fibonacci[i+1];
      fibonacci.push(lastFib);
      i++;
  }  
  fibonacci.pop();
  return fibonacci.filter(x=>x%2!==0).reduce((a,b)=>a+b);
}

console.log(sumFibs(1000));
console.log(sumFibs(4000000));
console.log(sumFibs(75024));
console.log(sumFibs(75025));

Надеюсь, это будет полезно, пожалуйста, прокомментируйте ниже, если у вас есть какие-либо вопросы! Спасибо.

0 голосов
/ 02 мая 2020
function sumFibs(num) {



let  numArr = [1, 1];

for(let i=0;num>=numArr[numArr.length-1];i++){

let y=numArr[0+i] +numArr[1+i]

numArr.push(y) 

}

 console.log(numArr)

 let oddNumArr=numArr.filter(numbers=>numbers % 2 !== 0) 
   let lessThanNumArr=oddNumArr.filter(n=>n<=num)  
console.log(oddNumArr)

let reducedArr=lessThanNumArr.reduce((a, b) => a + b, 0)

console.log(reducedArr)

return reducedArr;

}

sumFibs(75025);
...