-
-
Save jfairbank/8d36e4bde9c16dc0bac7 to your computer and use it in GitHub Desktop.
function *fibonacci(n) { | |
const infinite = !n && n !== 0; | |
let current = 0; | |
let next = 1; | |
while (infinite || n--) { | |
yield current; | |
[current, next] = [next, current + next]; | |
} | |
} |
function *fibonacci(n = null, current = 0, next = 1) { | |
if (n === 0) { | |
return current; | |
} | |
let m = n !== null ? n - 1 : null; | |
yield current; | |
yield *fibonacci(m, next, current + next); | |
} |
let [...first10] = fibonacci(10); | |
console.log(first10); | |
// [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] |
@AgentCoop - simply superb
Made one myself... tried doing it as small as possible, difference is it won't output 0 and have no ending
and the index 78 is more accurate since it uses BigInt n
index 78 should be 14472334024676221 not 14472334024676220
function* fibonacci(a=0n,b=1n){for(;a=b+(b=a);)yield a}
I really like your code and I'd like to know if you can explain your thought process on it. My code is a bit different. I would appreciate some advice. Thanks!
function fibonacciGenerator (n) {
var output = [];
if (n === 1) {
output = [0];
}
else if (n === 2) {
output = [0, 1];
}
else {
output = [0,1];
for (var i = 2; i < n;i++) {
output.push(output[output.length - 2] + output[output.length - 1]);
}
}
return output;
}
var output = fibonacciGenerator(10);
console.log(output);
var fibonacci_series = function (n)
{
if (n===1)
{
return [0, 1];
}
else
{
var s = fibonacci_series(n - 1);
s.push(s[s.length - 1] + s[s.length - 2]);
return s;
}
};
console.log(fibonacci_series(5));
The recursive variant could be a bit simpler: