Skip to content

Commit c8ab618

Browse files
authored
Merge pull request TheAlgorithms#477 from Eji4h/master
Refactor Maths/Factorial for more minimal side effects.
2 parents 71192ab + 285d2b0 commit c8ab618

File tree

2 files changed

+7
-24
lines changed

2 files changed

+7
-24
lines changed

Maths/Factorial.js

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,35 +14,22 @@
1414
'use strict'
1515

1616
const calcRange = (num) => {
17-
// Generate a range of numbers from 1 to `num`.
18-
let i = 1
19-
const range = []
20-
while (i <= num) {
21-
range.push(i)
22-
i += 1
23-
}
24-
return range
17+
return [...Array(num).keys()].map(i => i + 1)
2518
}
2619

2720
const calcFactorial = (num) => {
28-
let factorial
29-
const range = calcRange(num)
30-
31-
// Check if the number is negative, positive, null, undefined, or zero
21+
if (num === 0) {
22+
return 'The factorial of 0 is 1.'
23+
}
3224
if (num < 0) {
3325
return 'Sorry, factorial does not exist for negative numbers.'
3426
}
35-
if (num === null || num === undefined) {
27+
if (!num) {
3628
return 'Sorry, factorial does not exist for null or undefined numbers.'
3729
}
38-
if (num === 0) {
39-
return 'The factorial of 0 is 1.'
40-
}
4130
if (num > 0) {
42-
factorial = 1
43-
range.forEach(function (i) {
44-
factorial = factorial * i
45-
})
31+
const range = calcRange(num)
32+
const factorial = range.reduce((a, c) => a * c, 1)
4633
return `The factorial of ${num} is ${factorial}`
4734
}
4835
}

Maths/test/Factorial.test.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
import { calcFactorial } from '../Factorial'
22

33
describe('calcFactorial', () => {
4-
it('is a function', () => {
5-
expect(typeof calcFactorial).toEqual('function')
6-
})
7-
84
it('should return a statement for value "0"', () => {
95
expect(calcFactorial(0)).toBe('The factorial of 0 is 1.')
106
})

0 commit comments

Comments
 (0)