mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-06 01:11:43 +08:00
Refactor Maths/Factorial for more minimal side effects.
This commit is contained in:
@ -14,36 +14,24 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
const calcRange = (num) => {
|
const calcRange = (num) => {
|
||||||
// Generate a range of numbers from 1 to `num`.
|
return [...Array(num).keys()].map(i => i + 1);
|
||||||
let i = 1
|
|
||||||
const range = []
|
|
||||||
while (i <= num) {
|
|
||||||
range.push(i)
|
|
||||||
i += 1
|
|
||||||
}
|
|
||||||
return range
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const calcFactorial = (num) => {
|
const calcFactorial = (num) => {
|
||||||
let factorial
|
|
||||||
const range = calcRange(num)
|
|
||||||
|
|
||||||
// Check if the number is negative, positive, null, undefined, or zero
|
if (num > 0) {
|
||||||
if (num < 0) {
|
const range = calcRange(num)
|
||||||
return 'Sorry, factorial does not exist for negative numbers.'
|
const factorial = range.reduce((a, c) => a * c, 1);
|
||||||
}
|
return `The factorial of ${num} is ${factorial}`
|
||||||
if (num === null || num === undefined) {
|
|
||||||
return 'Sorry, factorial does not exist for null or undefined numbers.'
|
|
||||||
}
|
}
|
||||||
if (num === 0) {
|
if (num === 0) {
|
||||||
return 'The factorial of 0 is 1.'
|
return 'The factorial of 0 is 1.'
|
||||||
}
|
}
|
||||||
if (num > 0) {
|
if (num < 0) {
|
||||||
factorial = 1
|
return 'Sorry, factorial does not exist for negative numbers.'
|
||||||
range.forEach(function (i) {
|
}
|
||||||
factorial = factorial * i
|
if (!num) {
|
||||||
})
|
return 'Sorry, factorial does not exist for null or undefined numbers.'
|
||||||
return `The factorial of ${num} is ${factorial}`
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
import { calcFactorial } from '../Factorial'
|
import { calcFactorial } from '../Factorial'
|
||||||
|
|
||||||
describe('calcFactorial', () => {
|
describe('calcFactorial', () => {
|
||||||
it('is a function', () => {
|
|
||||||
expect(typeof calcFactorial).toEqual('function')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should return a statement for value "0"', () => {
|
it('should return a statement for value "0"', () => {
|
||||||
expect(calcFactorial(0)).toBe('The factorial of 0 is 1.')
|
expect(calcFactorial(0)).toBe('The factorial of 0 is 1.')
|
||||||
|
Reference in New Issue
Block a user