2015-09-29 6 views
0

Суммировать все нечетные числа рядов Фибоначчи с точностью до заданного числа.Базовый алгоритм JavaScript, серия Фибоначчи

Я не могу понять синтаксис проблемы, которую я испытываю. Проблема. Цикл цикла for заканчивается, когда он больше или равен значению num, вместо этого я хочу, чтобы он завершился сгенерированными значениями start.

Есть ли способ заставить его работать?

function sumFibs(num) { 
    var odd = [1]; // Odd numbers of the Fibonacci series 
    var start = [0,1]; // Fibonacci series 
    // Generating the series and filtering out the odd numbers 
    for(i=1;i<num;i++) { 
    var sum = 0; 
    sum = start[i] + start[i-1]; 
    start.push(sum); 
    if(sum%2 != 0) { 
     odd.push(sum); 
    } 
    } 
    // Generating sum of the odd numbers 
var main = 0; // sum of the odd numbers 
for(i=0;i<odd.length;i++) { 
    main += odd[i] 
} 
    console.log(start);console.log(odd);return main 
} 

sumFibs(4); 
+0

вместо этого вы хотите закончить с ...? что-то там – ziddarth

+0

Непонятно, что вы просите. – ergonaut

+0

Цикл до тех пор, пока он не достигнет значения num. Я хочу, чтобы он остановился, когда достигнет значения num, но в начале. Для ex - Если пройденное число равно 13, оно будет генерировать 13 чисел, оно не должно этого делать, оно должно остановиться, когда оно достигнет 13 в начале. – Lavios

ответ

0

Это должно быть так, что, если я правильно понимаю

while(start.length<num) 
{ 
     your code will be here 
} 
0

Вместо того чтобы работать с двумя массивами, может быть, это менее запутанной, чтобы работать с одним и использовать Array.prototype.reduce просуммировать только нечетные значения.

function sumFibs(num) { 
    var fib = [0, 1]; 
    var sum = 0; 
    var i = 2; 
    while (true) { 
    sum = fib[i-2] + fib[i-1]; 
    if (sum > num) { 
     break; 
    } 
    fib.push(sum); 
    i++; 
    } 
    return fib.reduce(function(v0, v) { 
    return v0 + (v % 2 === 0 ? 0 : v); 
    }, 0); 
} 

Посмотрите на мою попытку на это: http://jsfiddle.net/copet80/xejz4ka2/

0

Isnt это проект Эйлера вопрос? Если я правильно понимаю проблему, ваша проблема находится в цикле for. Более конкретно в его состоянии. Цикл for в вашем случае будет повторяться так много раз, как число равно -1, потому что вы начинаете с i = 1 и i < num. Таким образом, в вашем случае он будет повторяться уже 12 раз и достигнет гораздо большего числа, чем 13, если я правильно пойму проблему.

Сначала я был новичком, но меня учили, что вы используете цикл for, если знаете, сколько раз что-то повторять. В этом случае вы не знаете, сколько раз вам нужно повторять цикл for, потому что вы не знаете, когда вы достигнете номера 13.

В этом случае цикл while был бы лучше, я думаю, и вы задали условие для вашего номера , Так, например:

while(sum<=num){} 

или как Сомон передо мной сказал:

while (true){ 
    if(sum<num){ 
    break; 
    } 

Этот 2 коды закончится, если сумма превысит 13. Я верю, что вы не хотите количество Fibonaci тоже превышает 13. В этот сценарий вы должны сделать другие условия, но я чувствую, что его эйлер проекта я не дам здесь ответа.

Снова. у вас есть условие цикла для завершения, если число фишек превышает 13. Ваш код ищет 13-1 номера фибоначчи.

Смежные вопросы