[英]How can I get the sum of all odd fibonacci vales in 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
,這似乎很奇怪,因為我認為代碼的這一部分非常酷-使用函數值檢查if語句中的vs。
arr = fibonacci(num);
isFibVal = isFib(num);
isEvenVal = isEven(num);
if (isFibVal && !isEvenVal){
sum += sumArray(arr);
}
由於您正在接受FCC認證,因此我不會直接為您提供答案,但我會為您提供一些提示,以幫助您查找:
參見此段:
for(var j = 0; j < num; j++){
result = a + b;
a = b;
b = result;
fibArr.push(result);
}
還有這個:
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;
}
另外,您可能根本不需要此段:
isFibVal = isFib(num);
isEvenVal = isEven(num);
if (isFibVal && !isEvenVal){
sum += sumArray(arr);
祝好運。 作為完成了大部分課程的人,我可以說Free Code Camp是真正的交易。
您的位置非常接近,其他答案也很適合將您推向正確的方向,我將發布使用本地JS函數執行此操作的另一種方法:
function fibs(n) {
var f = [0, 1];
var extraNumber = 0;
for (var i = 0; i < n; i++) {
f.push(f[f.length - 1] + f[f.length - 2]);
}
// lets check if the passed in number is a fib:
if (f.indexOf(n) > -1) {
extraNumber = n;
}
console.log(f); // just to check we can cut all the logs later...
var filtered = f.filter(function(num) {
// filter out the even numbers
return num % 2 === 1;
});
console.log(filtered);
var sum = filtered.reduce(function(a, b) {
// add up whats left
return a + b;
});
console.log(sum);
return sum + extraNumber;
}
這是我的解決方案,我發現它很可讀:
function sumOddFibs(num) {
// initialize with 2 because
// fib sequence starts with 1 and 1
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;
}
您可以先定義前一個數字,當前數字和總斐波那契數的變量
要檢查奇數,可以使用if語句並使用%:
if(currNum%2!== 0){}
如果當前數字為奇數,則將其添加到總數中
fibTotal + = currNumber;
要確定您的下一個斐波那契編號,您需要添加上一個和當前編號:
var nextNumber = prevNumber + currNumber;
您需要將之前的號碼更新為當前號碼
prevNumber = currNumber;
將當前編號設置為序列中的下一個斐波那契編號
currNumber = nextNumber;
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.