斐波那契数列 - 仅添加奇数 - Javascript
Fibonacci Numbers - Add odd numbers only - Javascript
所以我正在尝试开发一个公式,将所有奇数斐波那契数加起来,直到并包括给定的数字。
例如:
- 给定的数字是 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);
显然代码不起作用。如果我删除 (if sum >= sum) break 语句,它会创建一个无限循环。我从另一个 post 此处获取了 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;
}
代码有点混乱...(k
是做什么用的?,元素的个数与问题定义无关,而且问题是关于将斐波那契数相加到某个值,而不是直到总和超过某个值)。
一个解决方案可能是
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;
}
选择更长的变量名会有帮助
执行此操作的最小方法。
http://jsfiddle.net/PuneetChawla/gzr68ccv/
function sum()
{
var a = 1;
var b = 0;
var c = 0;
var d = 4;
var temp = 1;
while(c<d-1)
{
c = a+b;
if(c%2 !=0){
temp = temp+c;
}
b=a;
a=c;
}
alert(temp);
}
这是我的解决方案。
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;
}
我调整了 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;
}
我的解决方案与列出的其他一些解决方案相近,但我发现我的解决方案更具可读性,所以这里是:
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)
}
所以我正在尝试开发一个公式,将所有奇数斐波那契数加起来,直到并包括给定的数字。
例如:
- 给定的数字是 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);
显然代码不起作用。如果我删除 (if sum >= sum) break 语句,它会创建一个无限循环。我从另一个 post 此处获取了 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;
}
代码有点混乱...(k
是做什么用的?,元素的个数与问题定义无关,而且问题是关于将斐波那契数相加到某个值,而不是直到总和超过某个值)。
一个解决方案可能是
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;
}
选择更长的变量名会有帮助
执行此操作的最小方法。
http://jsfiddle.net/PuneetChawla/gzr68ccv/
function sum()
{
var a = 1;
var b = 0;
var c = 0;
var d = 4;
var temp = 1;
while(c<d-1)
{
c = a+b;
if(c%2 !=0){
temp = temp+c;
}
b=a;
a=c;
}
alert(temp);
}
这是我的解决方案。
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;
}
我调整了 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;
}
我的解决方案与列出的其他一些解决方案相近,但我发现我的解决方案更具可读性,所以这里是:
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)
}