Skip to content

Commit 600215e

Browse files
committed
up code recursive function for factorial number problem
1 parent 7b9d6f8 commit 600215e

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { test, expect, describe } from 'bun:test';
2+
import { findFactorialRecursive, findFactorialIterative } from './recursion-factorial';
3+
4+
describe('Factorial Functions', () => {
5+
// Test cases for both recursive and iterative implementations
6+
const testCases = [
7+
{ input: 0, expected: 1 }, // Edge case: 0! = 1
8+
{ input: 1, expected: 1 }, // Edge case: 1! = 1
9+
{ input: 5, expected: 120 }, // Normal case: 5! = 120
10+
{ input: 7, expected: 7 * 6 * 5 * 4 * 3 * 2 * 1 } // Larger number
11+
];
12+
13+
// Test recursive implementation
14+
test('findFactorialRecursive handles various inputs', () => {
15+
testCases.forEach(({ input, expected }) => {
16+
expect(findFactorialRecursive(input)).toBe(expected);
17+
});
18+
});
19+
20+
// Test iterative implementation
21+
test('findFactorialIterative handles various inputs', () => {
22+
testCases.forEach(({ input, expected }) => {
23+
expect(findFactorialIterative(input)).toBe(expected);
24+
});
25+
});
26+
27+
// Error and edge case handling
28+
test('findFactorialRecursive handles negative numbers', () => {
29+
expect(findFactorialRecursive(-1)).toBeUndefined();
30+
});
31+
32+
test('findFactorialIterative handles negative numbers', () => {
33+
expect(findFactorialIterative(-1)).toBeUndefined;
34+
});
35+
36+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Write two functions that finds the factorial of any number. One should use recursive, the other should just use a for loop
2+
3+
export function findFactorialRecursive(number: number): number | undefined {
4+
if (number < 0) return undefined
5+
// Stop point
6+
if (number <= 1) return 1
7+
//code here
8+
return number * (findFactorialRecursive(number - 1) as number); // Recursive case
9+
// return when need
10+
}
11+
// VD: 5! = 5 * 4 * 3 * 2 * 1 => 120 = 5 * 4 * 3 * 2 * 1
12+
// Step 1: number = 5 -> return 5 * func(4)
13+
// Step 2: number = 4 -> return 4 * func(3)
14+
// Step 3: number = 3 -> return 3 * func(2)
15+
// Step 4: number = 2 -> return 2 * func(1) // 1
16+
// Step 5: number = 1 -> return 1
17+
18+
export function findFactorialIterative(number: number) {
19+
if (number < 0) return undefined
20+
if (number <= 1) return 1
21+
let factorial = 1;
22+
//code here
23+
while (number > 1) {
24+
factorial *= number
25+
number -= 1
26+
}
27+
return factorial;
28+
}
29+
30+
// 5
31+
// number = 4
32+
// 5 * 4
33+
// 5 * 4 * 3
34+
// 5 * 4 * 3 * 2

0 commit comments

Comments
 (0)