Add UUID v4 generators benchmark
[benchmarks-js.git] / fibonacci.js
CommitLineData
a9c78d5d
JB
1const Benchmark = require('benchmark')
2const { LIST_FORMATTER } = require('./benchmark-utils')
3
4const suite = new Benchmark.Suite()
5
6const number = 30
7
8/**
9 * @param num
7fd91296 10 * @returns
a9c78d5d
JB
11 */
12function fibonacciLoop (num) {
13 let a = 1
14 let b = 0
15 let temp
16
17 while (num >= 0) {
18 temp = a
19 a = a + b
20 b = temp
21 num--
22 }
23
24 return b
25}
26
27/**
28 * @param num
7fd91296 29 * @returns
a9c78d5d
JB
30 */
31function fibonacciRecursion (num) {
32 if (num <= 1) return 1
33
34 return fibonacciRecursion(num - 1) + fibonacciRecursion(num - 2)
35}
36
37/**
38 * @param num
39 * @param memo
7fd91296 40 * @returns
a9c78d5d
JB
41 */
42function fibonacciRecursionMemoization (num, memo) {
43 memo = memo || {}
44
45 if (memo[num]) return memo[num]
46 if (num <= 1) return 1
47
48 return (memo[num] =
49 fibonacciRecursionMemoization(num - 1, memo) +
50 fibonacciRecursionMemoization(num - 2, memo))
51}
52
53suite
2deff321 54 .add('fibonacciLoop', () => {
a9c78d5d
JB
55 fibonacciLoop(number)
56 })
2deff321 57 .add('fibonacciRecursion', () => {
a9c78d5d
JB
58 fibonacciRecursion(number)
59 })
2deff321 60 .add('fibonacciRecursionMemoization', () => {
a9c78d5d
JB
61 fibonacciRecursionMemoization(number)
62 })
2deff321 63 .on('cycle', event => {
a9c78d5d
JB
64 console.log(event.target.toString())
65 })
66 .on('complete', function () {
67 console.log(
68 'Fastest is ' + LIST_FORMATTER.format(this.filter('fastest').map('name'))
69 )
7fd91296 70 // eslint-disable-next-line n/no-process-exit
a9c78d5d
JB
71 process.exit()
72 })
73 .run()