Я работаю через это Free Code Camp exercise.Как я могу получить сумму всех нечетных значений фибоначчи в javaScript?
Возвращает сумму всех нечетных чисел Фибоначчи до и включая принятый номер, если это число Фибоначчи. Первые несколько чисел последовательности Фибоначчи - это 1, 1, 2, 3, 5 и 8, и каждое последующее число представляет собой сумму двух предыдущих чисел.
А вот то, что я до сих пор ...
Любые предложения?
function sumFibs(num) {
var arr, isFibVal, isEvenVal, sum, i = 0, fibonacci = function (num){
var a, b, result, fibArr = [1];
a=0;
b=1;
result=b;
for(var j = 0; j < num; j++){
result = a + b;
a = b;
b = result;
fibArr.push(result);
}
return fibArr;
},
isFib = function (val){
var prev = 0;
var curr = 1;
while(prev<=val){
if(prev == val){
return true;
} else {
return false;
}
curr = prev + curr;
prev = curr - prev;
}
},
isEven = function(someNumber){
return (someNumber % 2 === 0) ? true : false;
};
function sumArray(array) {
for (
var
index = 0, // The iterator
length = array.length, // Cache the array length
sum = 0; // The total amount
index < length; // The "for"-loop condition
sum += array[index++] // Add number on each iteration
);
return sum;
}
arr = fibonacci(num);
isFibVal = isFib(num);
isEvenVal = isEven(num);
if (isFibVal && !isEvenVal){
sum += sumArray(arr);
}
return sum;
}
Все, что я вернусь есть undefined
, который, кажется странным, потому что я думал, что эта часть моего кода было довольно прохладно, используя значение функции для проверки против в, если заявлении.
arr = fibonacci(num);
isFibVal = isFib(num);
isEvenVal = isEven(num);
if (isFibVal && !isEvenVal){
sum += sumArray(arr);
}
Спасибо за ваше понимание-Так первые два не нужны? Я знаю, вы сказали, что последнее из трех, вероятно, вообще не нужно. Что касается Free Code Camp, в последнее время меня очень поощряют. Сначала я не мог преодолеть многие проблемы с алгоритмом, но в последнее время я был в полосе, где я проходил через них. –
Первые два сегмента нуждаются в некотором редактировании логики. Насколько мне известно, третий не нужен. Вы можете реализовать логику третьего сегмента в первых двух и, возможно, заменить этот сегмент на один лайнер. Да, FCC хорош. Имейте в виду, что для начинающих это немного сложнее. Для кого-то, кто совершенно новый, я бы предложил сначала запустить [codecademy] (https://codecademy.com). – timolawl
Спасибо, хорошо, я продолжу. :) Я прошел через codecademy и тому подобное (Lynda, schoolchool и т. Д.). Моя проблема была практикой. Как изучение устного языка, вы должны начать бурение во всех конструкциях, которые помогут передать ваши идеи. Так как я делаю это - на самом деле все изменилось ... –