mirror of
https://github.moeyy.xyz/https://github.com/trekhleb/javascript-algorithms.git
synced 2024-11-10 11:09:43 +08:00
Compare commits
5 Commits
f122c76933
...
eb9ef2da87
Author | SHA1 | Date | |
---|---|---|---|
|
eb9ef2da87 | ||
|
e11827b833 | ||
|
2b4f12622a | ||
|
9787af0267 | ||
|
4ea1ad0bb8 |
@ -0,0 +1,12 @@
|
||||
import factorialBigInt from '../factorialBigInt';
|
||||
|
||||
describe('factorialBigInt', () => {
|
||||
it('should calculate factorial', () => {
|
||||
expect(factorialBigInt(0n)).toBe(1n);
|
||||
expect(factorialBigInt(1n)).toBe(1n);
|
||||
expect(factorialBigInt(5n)).toBe(120n);
|
||||
expect(factorialBigInt(8n)).toBe(40320n);
|
||||
expect(factorialBigInt(10n)).toBe(3628800n);
|
||||
expect(factorialBigInt(100n)).toBe(93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000n);
|
||||
});
|
||||
});
|
@ -0,0 +1,11 @@
|
||||
import factorialRecursiveTCO from '../factorialRecursiveTCO';
|
||||
|
||||
describe('factorialRecursiveTCO', () => {
|
||||
it('should calculate factorial', () => {
|
||||
expect(factorialRecursiveTCO(0)).toBe(1);
|
||||
expect(factorialRecursiveTCO(1)).toBe(1);
|
||||
expect(factorialRecursiveTCO(5)).toBe(120);
|
||||
expect(factorialRecursiveTCO(8)).toBe(40320);
|
||||
expect(factorialRecursiveTCO(10)).toBe(3628800);
|
||||
});
|
||||
});
|
@ -0,0 +1,12 @@
|
||||
import factorialRecursiveTCOBigInt from '../factorialRecursiveTCOBigInt';
|
||||
|
||||
describe('factorialRecursiveTCOBigInt', () => {
|
||||
it('should calculate factorial', () => {
|
||||
expect(factorialRecursiveTCOBigInt(0n)).toBe(1n);
|
||||
expect(factorialRecursiveTCOBigInt(1n)).toBe(1n);
|
||||
expect(factorialRecursiveTCOBigInt(5n)).toBe(120n);
|
||||
expect(factorialRecursiveTCOBigInt(8n)).toBe(40320n);
|
||||
expect(factorialRecursiveTCOBigInt(10n)).toBe(3628800n);
|
||||
expect(factorialRecursiveTCOBigInt(100n)).toBe(93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000n);
|
||||
});
|
||||
});
|
13
src/algorithms/math/factorial/factorialBigInt.js
Normal file
13
src/algorithms/math/factorial/factorialBigInt.js
Normal file
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* @param {bigint} number
|
||||
* @return {bigint}
|
||||
*/
|
||||
export default function factorialBigInt(number) {
|
||||
let result = 1n;
|
||||
|
||||
for (let i = 2n; i <= number; i += 1n) {
|
||||
result *= i;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
12
src/algorithms/math/factorial/factorialRecursiveTCO.js
Normal file
12
src/algorithms/math/factorial/factorialRecursiveTCO.js
Normal file
@ -0,0 +1,12 @@
|
||||
/**
|
||||
* @param {number} number
|
||||
* @return {number}
|
||||
*/
|
||||
export default function factorialRecursiveTCO(number) {
|
||||
function fact(number, accumulator = 1) {
|
||||
if (number < 2) return accumulator;
|
||||
else return fact(number - 1, accumulator * number);
|
||||
}
|
||||
|
||||
return fact(number);
|
||||
}
|
12
src/algorithms/math/factorial/factorialRecursiveTCOBigInt.js
Normal file
12
src/algorithms/math/factorial/factorialRecursiveTCOBigInt.js
Normal file
@ -0,0 +1,12 @@
|
||||
/**
|
||||
* @param {bigint} number
|
||||
* @return {bigint}
|
||||
*/
|
||||
export default function factorialRecursiveTCOBigInt(number) {
|
||||
function fact(number, accumulator = 1n) {
|
||||
if (number < 2n) return accumulator;
|
||||
else return fact(number - 1n, accumulator * number);
|
||||
}
|
||||
|
||||
return fact(number);
|
||||
}
|
Loading…
Reference in New Issue
Block a user