Skip to content

Instantly share code, notes, and snippets.

@zerobias
Last active October 18, 2018 10:49
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zerobias/a14358568f9a218c70c68154add0415d to your computer and use it in GitHub Desktop.
Save zerobias/a14358568f9a218c70c68154add0415d to your computer and use it in GitHub Desktop.
{
function suite(fiboMax, repeats, fiboLoop) {
function getMedian(args) {
if (!args.length) {return 0};
var numbers = args.slice(0).sort((a,b) => a - b);
var middle = Math.floor(numbers.length / 2);
var isEven = numbers.length % 2 === 0;
return isEven ? (numbers[middle] + numbers[middle - 1]) / 2 : numbers[middle];
}
var global = {result: 1|0}
function run() {
var start = performance.now()
global.result = fiboLoop(fiboMax)
return performance.now() - start
}
function starter(n) {
var results = new Array(n),
fibos = new Array(n),
total = 0
for (var i = 0; i < n; i++) {
total += (results[i] = run())
fibos[i] = global.result
}
return {
median: getMedian(results),
avg: results.reduce((n, o) => n + o, 0) / n,
runs: results,
total,
repeats,
fiboMax,
numbers: fibos,
}
}
return starter(repeats)
}
var a = suite(20, 20000, function fiboRec(num) {
if (num <= 1) return 1;
return fiboRec(num - 1) + fiboRec(num - 2);
})
var b = suite(800, 20000, function fiboLoop(num){
var a = 1, b = 0, temp;
while (num >= 0){
temp = a;
a = a + b;
b = temp;
num--;
}
return b;
});
console.log(a)
console.log(b)
}

Test 1

function fiboRec(num) {
  if (num <= 1) return 1;

  return fiboRec(num - 1) + fiboRec(num - 2);
}

Fibo numbers greater than 20 freeze chrome

20 000 calls

avg: 0.09504499999857216,
fiboMax: 20,
median: 0.09999999747378752,
totalTime: 1900.8999999714433

Test 2

function fiboLoop(num){
  var a = 1, b = 0, temp;

  while (num >= 0){
    temp = a;
    a = a + b;
    b = temp;
    num--;
  }

  return b;
}

20 000 calls

avg: 0.001465000000098371,
fiboMax: 800,
median: 0,
totalTime: 29.30000000196742,
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment