factorial via generator
JavaScript
const factorial = n => {
if (!n) return 1;
return n * factorial(n - 1);
};
function* genFactorial() {
let result = 1;
let n = yield;
while (n) yield result *= n--;
yield result;
}
const fact = genFactorial();
console.error('factorial', factorial(8));
console.error('fact.next()', fact.next());
console.error('fact.next()', fact.next(8));
for (let n of fact) {
console.error('n', n);
}