TheAlgorithms/C++ 1.0.0
All the algorithms implemented in C++
Loading...
Searching...
No Matches
factorial_memoization.cpp File Reference

Factorial calculation using recursion and memoization More...

#include <cassert>
#include <cstdint>
#include <vector>
Include dependency graph for factorial_memoization.cpp:

Go to the source code of this file.

Classes

class  MemorisedFactorial

Functions

void test_MemorisedFactorial_in_order ()
void test_MemorisedFactorial_no_order ()
int main ()
 Main function to run tests.

Detailed Description

Factorial calculation using recursion and memoization

This program computes the factorial of a non-negative integer using recursion with memoization (top-down dynamic programming). It stores intermediate results to avoid redundant calculations for improved efficiency.

Memoization is a form of caching where the result to an expensive function call is stored and returned. Example: Input: n = 5 Output: 120

Explanation: 5! = 5 × 4 × 3 × 2 × 1 = 120

The program uses a recursive function which caches computed results in a memo array to avoid recalculating factorials for the same numbers.

Time Complexity: O(n) Space Complexity: O(n)

Definition in file factorial_memoization.cpp.

Function Documentation

◆ main()

int main ( void )

Main function to run tests.

Returns
0 on program success

Definition at line 61 of file factorial_memoization.cpp.

61 {
62 test_MemorisedFactorial_in_order();
63 test_MemorisedFactorial_no_order();
64 return 0;
65}

◆ test_MemorisedFactorial_in_order()

void test_MemorisedFactorial_in_order ( )

Definition at line 44 of file factorial_memoization.cpp.

44 {
46 assert(factorial(0) == 1);
47 assert(factorial(1) == 1);
48 assert(factorial(5) == 120);
49 assert(factorial(10) == 3628800);
50}
uint64_t factorial(uint8_t n)
function to find factorial of given number
Definition factorial.cpp:29

◆ test_MemorisedFactorial_no_order()

void test_MemorisedFactorial_no_order ( )

Definition at line 52 of file factorial_memoization.cpp.

52 {
54 assert(factorial(10) == 3628800);
55}