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`);