JSFiddle - React, Tailwind, and code Playground
by Scott Kaye
JavaScript
const fRecursive = (n, s = [0, 1]) => (
s.push(+s.slice(-2, -1) + +s.slice(-1)), --n > 0 ? fr(n, s) : s
);
const fIterative = (n, s = [0, 1]) => {
for (; n--; s.push(+s.slice(-2, -1) + +s.slice(-1)));
return s;
};
const fIterativeFast = (n, s = [0, 1], i = 1) => {
for (; i < n - 1; s[++i] = s[i - 1] + s[i - 2]);
return s;
};
//Respectively golfed
let fr=(n,s=[0,1])=>(s.push(+s.slice(-2,-1)+~s.slice(-1)),--n>0?fr(n,s):s);
let fi=(n,s=[0,1])=>{for(;n--;s.push(+s.slice(-2,-1)+~s.slice(-1)));return s};
//let fi2=(n,s=[0,1],i=1)=>{for(;i<n-1;s[++i]=s[i-1]+s[i-2]);return s};
let fi2=(n,s=[0,1])=>eval("for(i=1;i<n-1;s[++i]=s[i-1]+s[i-2]);s");
//Benchmarks
let times = 500, i;
let frs = window.performance.now();
for(i=0;i<times;fr(100), ++i);
let fre = window.performance.now() - frs;
let fis = window.performance.now();
for(i=0;i<times;fi(100), ++i);
let fie = window.performance.now() - fis;
let fi2s = window.performance.now();
for(i=0;i<times;fi2(100), ++i);
let fi2e = window.performance.now() - fi2s;
console.log(`${times} tests of f(100):
Recursive: ${fre.toFixed(4)}ms
Iterative + push: ${fie.toFixed(4)}ms
Iterative + direct access: ${fi2e.toFixed(4)}ms`);