build(deps-dev): apply updates
[benchmarks-js.git] / fibonacci.js
CommitLineData
662a730a 1const Benchmark = require('benny')
a9c78d5d
JB
2
3const number = 30
4
5/**
6 * @param num
7fd91296 7 * @returns
a9c78d5d
JB
8 */
9function fibonacciLoop (num) {
10 let a = 1
11 let b = 0
12 let temp
13
14 while (num >= 0) {
15 temp = a
16 a = a + b
17 b = temp
18 num--
19 }
20
21 return b
22}
23
24/**
25 * @param num
7fd91296 26 * @returns
a9c78d5d
JB
27 */
28function fibonacciRecursion (num) {
29 if (num <= 1) return 1
30
31 return fibonacciRecursion(num - 1) + fibonacciRecursion(num - 2)
32}
33
34/**
35 * @param num
36 * @param memo
7fd91296 37 * @returns
a9c78d5d
JB
38 */
39function fibonacciRecursionMemoization (num, memo) {
40 memo = memo || {}
41
42 if (memo[num]) return memo[num]
43 if (num <= 1) return 1
44
45 return (memo[num] =
46 fibonacciRecursionMemoization(num - 1, memo) +
47 fibonacciRecursionMemoization(num - 2, memo))
48}
49
662a730a 50Benchmark.suite(
bb578730 51 `Fibonacci number ${number}`,
662a730a 52 Benchmark.add('fibonacciLoop', () => {
a9c78d5d 53 fibonacciLoop(number)
662a730a
JB
54 }),
55 Benchmark.add('fibonacciRecursion', () => {
a9c78d5d 56 fibonacciRecursion(number)
662a730a
JB
57 }),
58 Benchmark.add('fibonacciRecursionMemoization', () => {
a9c78d5d 59 fibonacciRecursionMemoization(number)
662a730a
JB
60 }),
61 Benchmark.cycle(),
62 Benchmark.complete(),
63 Benchmark.save({ file: 'fibonacci', format: 'json', details: true }),
64 Benchmark.save({ file: 'fibonacci', format: 'chart.html', details: true }),
65 Benchmark.save({ file: 'fibonacci', format: 'table.html', details: true })
4b16770a
JB
66).catch(err => {
67 console.error(err)
68})