Apply dependencies update
[benchmarks-js.git] / fibonacci.js
1 const Benchmark = require('benchmark')
2 const { LIST_FORMATTER } = require('./benchmark-utils')
3
4 const suite = new Benchmark.Suite()
5
6 const number = 30
7
8 /**
9 * @param num
10 * @returns
11 */
12 function 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
29 * @returns
30 */
31 function 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
40 * @returns
41 */
42 function 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
53 suite
54 .add('fibonacciLoop', function () {
55 fibonacciLoop(number)
56 })
57 .add('fibonacciRecursion', function () {
58 fibonacciRecursion(number)
59 })
60 .add('fibonacciRecursionMemoization', function () {
61 fibonacciRecursionMemoization(number)
62 })
63 .on('cycle', function (event) {
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 )
70 // eslint-disable-next-line n/no-process-exit
71 process.exit()
72 })
73 .run()