Bird
Raised Fist0
DSA Cprogramming~5 mins

Factorial Using Recursion in DSA C - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Factorial Using Recursion
O(n)
Understanding Time Complexity

We want to understand how the time needed to calculate a factorial grows as the number gets bigger.

Specifically, how many steps does the recursive factorial function take as input increases?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


int factorial(int n) {
    if (n == 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}
    

This code calculates the factorial of a number using recursion by multiplying n with factorial of n-1 until it reaches 0.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Recursive call to factorial with n-1
  • How many times: Exactly n times until base case n=0 is reached
How Execution Grows With Input

Each increase in input n adds one more recursive call, so the steps grow directly with n.

Input Size (n)Approx. Operations
10About 10 recursive calls
100About 100 recursive calls
1000About 1000 recursive calls

Pattern observation: The number of steps grows in a straight line as n increases.

Final Time Complexity

Time Complexity: O(n)

This means the time to compute factorial grows directly in proportion to the input number.

Common Mistake

[X] Wrong: "Recursion makes factorial calculation take exponential time because it calls itself many times."

[OK] Correct: Each recursive call happens only once per number down to zero, so calls grow linearly, not exponentially.

Interview Connect

Understanding how recursion affects time helps you explain and optimize solutions clearly in interviews.

Self-Check

"What if we changed the recursion to use a loop instead? How would the time complexity change?"

Practice

(1/5)
1. What does the factorial of a number represent in mathematics?
easy
A. The number divided by 2
B. The sum of all positive integers up to that number
C. The number multiplied by 2
D. The product of all positive integers up to that number

Solution

  1. Step 1: Understand factorial definition

    Factorial of a number n (written as n!) is the product of all positive integers from 1 to n.
  2. Step 2: Compare options with definition

    Only The product of all positive integers up to that number correctly describes factorial as a product, not sum or division.
  3. Final Answer:

    The product of all positive integers up to that number -> Option D
  4. Quick Check:

    Factorial = product of integers [OK]
Hint: Factorial means multiply all numbers down to 1 [OK]
Common Mistakes:
  • Confusing factorial with sum
  • Thinking factorial divides the number
  • Mixing multiplication with addition
2. Which of the following is the correct base case for a recursive factorial function in C?
easy
A. if (n == 0) return 1;
B. if (n == 1) return 0;
C. if (n == 0) return 0;
D. if (n == 1) return n + 1;

Solution

  1. Step 1: Identify base case for factorial

    Factorial of 0 is defined as 1, so base case must return 1 when n is 0.
  2. Step 2: Check options for correct base case

    if (n == 0) return 1; returns 1 when n is 0, which is correct. Others return wrong values or conditions.
  3. Final Answer:

    if (n == 0) return 1; -> Option A
  4. Quick Check:

    Base case n=0 returns 1 [OK]
Hint: Base case for factorial is n=0 returns 1 [OK]
Common Mistakes:
  • Returning 0 for base case
  • Using wrong condition like n==1
  • Returning n+1 incorrectly
3. What is the output of the following C code?
int factorial(int n) {
    if (n == 0) return 1;
    else return n * factorial(n - 1);
}

int main() {
    printf("%d", factorial(4));
    return 0;
}
medium
A. 24
B. 10
C. 16
D. 120

Solution

  1. Step 1: Trace factorial(4) calls

    factorial(4) calls factorial(3), factorial(3) calls factorial(2), factorial(2) calls factorial(1), factorial(1) calls factorial(0).
  2. Step 2: Calculate return values

    factorial(0) = 1
    factorial(1) = 1 * 1 = 1
    factorial(2) = 2 * 1 = 2
    factorial(3) = 3 * 2 = 6
    factorial(4) = 4 * 6 = 24
  3. Final Answer:

    24 -> Option A
  4. Quick Check:

    4! = 24 [OK]
Hint: Multiply down from n to 1 recursively [OK]
Common Mistakes:
  • Stopping recursion too early
  • Adding instead of multiplying
  • Wrong base case causing infinite recursion
4. Identify the error in this recursive factorial function and select the fix:
int factorial(int n) {
    if (n == 1) return 1;
    else return n * factorial(n);
}
medium
A. Change base case to if (n == 0) return 0;
B. Change recursive call to factorial(n - 1);
C. Remove base case entirely;
D. Change return to n + factorial(n - 1);

Solution

  1. Step 1: Analyze recursive call

    The function calls factorial(n) inside itself without reducing n, causing infinite recursion.
  2. Step 2: Correct recursive call to reduce n

    Changing call to factorial(n - 1) ensures n decreases each call, reaching base case.
  3. Final Answer:

    Change recursive call to factorial(n - 1); -> Option B
  4. Quick Check:

    Recursive call must reduce n [OK]
Hint: Recursive calls must move toward base case [OK]
Common Mistakes:
  • Calling factorial(n) again causing infinite loop
  • Wrong base case value
  • Using addition instead of multiplication
5. How would you modify a recursive factorial function to handle negative inputs by returning -1 for invalid input?
Choose the correct code snippet.
hard
A. if (n <= 0) return 1; else return n * factorial(n - 1);
B. if (n == 0) return -1; else return n * factorial(n - 1);
C. if (n < 0) return -1; else if (n == 0) return 1; else return n * factorial(n - 1);
D. if (n < 0) return 0; else return n * factorial(n - 1);

Solution

  1. Step 1: Add check for negative input

    Factorial is not defined for negative numbers, so return -1 if n < 0.
  2. Step 2: Keep base case and recursive call correct

    Return 1 if n == 0, else multiply n by factorial(n - 1).
  3. Final Answer:

    if (n < 0) return -1; else if (n == 0) return 1; else return n * factorial(n - 1); -> Option C
  4. Quick Check:

    Negative input returns -1 [OK]
Hint: Check negative input first, then proceed [OK]
Common Mistakes:
  • Not handling negative input
  • Returning wrong value for negatives
  • Incorrect base case for zero
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard