Bird
Raised Fist0
DSA Goprogramming~5 mins

Factorial Using Recursion in DSA Go - 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 taken by a recursive factorial function grows as the input number increases.

Specifically, how many steps does the function take to calculate factorial of n?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

package main

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

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

Identify Repeating Operations
  • 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 n adds one more recursive call, so the steps grow directly with n.

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

Pattern observation: The number of steps grows linearly as n increases.

Final Time Complexity

Time Complexity: O(n)

This means the time to compute factorial grows in a straight line with the input size n.

Common Mistake

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

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

Interview Connect

Understanding recursive time complexity helps you explain how your code scales and shows you can reason about function calls clearly.

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 product of all positive integers up to that number
B. The sum of all positive integers up to that number
C. The number multiplied by 2
D. The number divided by 2

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 other operations.
  3. Final Answer:

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

    Factorial = product of integers [OK]
Hint: Factorial multiplies numbers down to 1 [OK]
Common Mistakes:
  • Confusing factorial with sum
  • Thinking factorial doubles the number
  • Assuming factorial divides the number
2. Which of the following is the correct base case for a recursive factorial function in Go?
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 should return 1 when n is 0.
  2. Step 2: Check options for correct base case

    Only if n == 0 { return 1 } returns 1 when n == 0, which is correct base case.
  3. Final Answer:

    if n == 0 { return 1 } -> Option A
  4. Quick Check:

    Base case n=0 returns 1 [OK]
Hint: Factorial base case returns 1 at zero [OK]
Common Mistakes:
  • Returning 0 for base case
  • Returning wrong value for n=1
  • Missing base case causing infinite recursion
3. What is the output of this Go code?
func factorial(n int) int {
    if n == 0 {
        return 1
    }
    return n * factorial(n-1)
}

fmt.Println(factorial(3))
medium
A. 3
B. 9
C. 6
D. 0

Solution

  1. Step 1: Trace factorial(3) calls

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

    factorial(1) = 1*1=1, factorial(2) = 2*1=2, factorial(3) = 3*2=6.
  3. Final Answer:

    6 -> Option C
  4. Quick Check:

    3! = 6 [OK]
Hint: Multiply down from n to 1 recursively [OK]
Common Mistakes:
  • Adding instead of multiplying
  • Returning n instead of recursive call
  • Missing base case causing stack overflow
4. Identify the error in this recursive factorial function:
func factorial(n int) int {
    if n == 1 {
        return 1
    }
    return n * factorial(n)
}
medium
A. Missing base case for n == 0
B. Recursive call uses n instead of n-1 causing infinite recursion
C. Returns 0 instead of 1 in base case
D. Function should return float instead of int

Solution

  1. Step 1: Analyze recursive call parameter

    The function calls factorial(n) again without reducing n, causing infinite recursion.
  2. Step 2: Identify correct recursive call

    Recursive call should be factorial(n-1) to reduce n and reach base case.
  3. Final Answer:

    Recursive call uses n instead of n-1 causing infinite recursion -> Option B
  4. Quick Check:

    Recursive call must reduce n [OK]
Hint: Recursive call must reduce input to reach base case [OK]
Common Mistakes:
  • Calling factorial with same n causing infinite loop
  • Wrong base case value
  • Ignoring base case leading to stack overflow
5. How would you modify the recursive factorial function to handle negative inputs gracefully in Go?
hard
A. Use a loop instead of recursion for negative inputs
B. Remove base case and let recursion handle negative inputs
C. Return factorial of absolute value of n without check
D. Add a check to return 0 if n is negative before recursion

Solution

  1. Step 1: Understand factorial domain

    Factorial is not defined for negative numbers, so function should handle negatives explicitly.
  2. Step 2: Add input validation

    Adding a check to return 0 (or error) if n is negative prevents invalid recursion calls.
  3. Final Answer:

    Add a check to return 0 if n is negative before recursion -> Option D
  4. Quick Check:

    Validate input before recursion [OK]
Hint: Check for negatives before recursion to avoid errors [OK]
Common Mistakes:
  • Ignoring negative inputs causing infinite recursion
  • Using absolute value without validation
  • Removing base case causing stack overflow
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