💾*fibonacci()
generate fibonacci numbers: 1, 1, 2, 3, 5, 8 ...
JS⟩ iteration ⟩ custom generators ⟩ *fibonacci()
💾 replit:fibonacci sequence
🌀 extension: Iterator - extend built-in iterable iterators.
// ⭐️ fibonacci sequence: 1, 1, 2, 3, 5, 8 ... (generator)
// -------------------------------------------------------
function* fibonacci() {
let [prev, next] = [0, 1]; // ⭐️ destructuring assignment
// ⭐️ infinite if `terms` is `undefined`, finite otherwise.
while (true) {
yield next;
[prev, next] = [next, prev + next];
}
}
// ⭐️ nth term of Fibonacci sequence
// -------------------------------------------------------
function F(n) {
// return 0 if !(n > 0)
if (!(n > 0)) return 0;
// iterate sequence until we get to the nth term
for (const x of fibonacci()) {
if (--n <= 0) return x;
}
}
// ⭐️ export
module.exports = { fibonacci, F }💾 replit:fibonacci sequence
🌀 extension: Iterator - extend built-in iterable iterators.
// ⭐️ import
const Iterator = require('./Iterator.js'); // extend (built-in) iterable iterators
const { fibonacci, F } = require('./fibonacci.js');
// log
[
// ✅ test extension
fibonacci() // generator: 1, 1, 2, 3, 5, 8, ...
.take(5) // generator: 1, 1, 2, 3, 5
.map(x => x * x) // generator: 1, 1, 4, 9, 25
.toArray(), // array: [ 1, 1, 4, 9, 25 ]
// ✅ nth terms
F(1), F(2), F(3), F(4), // 1, 1, 2, 3
F(-2), F(-1), F(0), // 0, 0, 0
F('foo'), // 0
].forEach(x => console.log(x));Last updated
Was this helpful?