// Y combinator revisited
Y = f => (x => f(y => x(x)(y)))(x => f(y => x(x)(y)));
R = f => n => (n <= 1) ? n : f(n - 1) + f(n - 2);
S = f => n => (n == 0) ? 1 : n * f(n - 1);
const fiby = Y(R);
const facty = Y(S);
console.log("Fibonacci sequence:");
for (let i = 0; i <= 20; i++) {
console.log(`f(${i})=${fiby(i)}`);
}
console.log("Factorial:");
for (let i = 0; i <= 16; i++) {
console.log(`${i}!=${facty(i)}`);
}
Ly8gWSBjb21iaW5hdG9yIHJldmlzaXRlZAoKWSA9IGYgPT4gKHggPT4gZih5ID0+IHgoeCkoeSkpKSh4ID0+IGYoeSA9PiB4KHgpKHkpKSk7ClIgPSBmID0+IG4gPT4gKG4gPD0gMSkgPyBuIDogZihuIC0gMSkgKyBmKG4gLSAyKTsKUyA9IGYgPT4gbiA9PiAobiA9PSAwKSA/IDEgOiBuICogZihuIC0gMSk7Cgpjb25zdCBmaWJ5ID0gWShSKTsKY29uc3QgZmFjdHkgPSBZKFMpOwoKY29uc29sZS5sb2coIkZpYm9uYWNjaSBzZXF1ZW5jZToiKTsKZm9yIChsZXQgaSA9IDA7IGkgPD0gMjA7IGkrKykgewoJY29uc29sZS5sb2coYGYoJHtpfSk9JHtmaWJ5KGkpfWApOwp9Cgpjb25zb2xlLmxvZygiRmFjdG9yaWFsOiIpOwpmb3IgKGxldCBpID0gMDsgaSA8PSAxNjsgaSsrKSB7Cgljb25zb2xlLmxvZyhgJHtpfSE9JHtmYWN0eShpKX1gKTsKfQ==