Bird
Raised Fist0
DSA Goprogramming~5 mins

Recursion Base Case and Recursive Case in DSA Go - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Recursion Base Case and Recursive Case
O(n)
Understanding Time Complexity

We want to understand how the time taken by a recursive function grows as the input size changes.

Specifically, we ask: How many times does the function call itself before stopping?

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 using recursion with a base case and a recursive case.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: The function calls itself with a smaller number (n-1).
  • How many times: It repeats until n reaches 0, so it calls itself n times.
How Execution Grows With Input

Each time the function calls itself, it does one multiplication and one smaller call.

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

Pattern observation: The number of operations grows directly with n; doubling n doubles the work.

Final Time Complexity

Time Complexity: O(n)

This means the time taken grows linearly with the input size n.

Common Mistake

[X] Wrong: "Recursion always makes the program slow and complex exponentially."

[OK] Correct: In this case, recursion runs a simple chain of calls, so it grows linearly, not exponentially.

Interview Connect

Understanding how base and recursive cases affect time helps you explain recursion clearly and analyze its efficiency in interviews.

Self-Check

"What if the recursive call was made twice in the function? How would the time complexity change?"

Practice

(1/5)
1. What is the purpose of the base case in a recursive function?
easy
A. To print the result of the recursion
B. To call the function again with a smaller input
C. To increase the input size for the next call
D. To stop the recursion and prevent infinite calls

Solution

  1. Step 1: Understand recursion basics

    A recursive function calls itself repeatedly until a stopping condition is met.
  2. Step 2: Identify the role of base case

    The base case stops further recursive calls to avoid infinite loops.
  3. Final Answer:

    To stop the recursion and prevent infinite calls -> Option D
  4. Quick Check:

    Base case = stop recursion [OK]
Hint: Base case always stops recursion to avoid infinite loops [OK]
Common Mistakes:
  • Confusing base case with recursive case
  • Thinking base case calls function again
  • Ignoring base case leads to infinite recursion
2. Which of the following is the correct syntax for a base case in Go recursion to stop when n is zero?
easy
A. if n == 0 { return 0 }
B. if n = 0 { return 0 }
C. if n != 0 { return 0 }
D. if n > 0 { return 0 }

Solution

  1. Step 1: Check Go syntax for condition

    In Go, equality check uses '==' not '=' which is assignment.
  2. Step 2: Identify correct base case condition

    Base case stops recursion when n equals zero, so 'if n == 0 { return 0 }' is correct.
  3. Final Answer:

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

    Use '==' for comparison in base case [OK]
Hint: Use '==' for comparison in base case conditions [OK]
Common Mistakes:
  • Using '=' instead of '==' for comparison
  • Wrong condition logic for base case
  • Returning wrong value in base case
3. What will be the output of this Go recursive function when called with factorial(3)?
func factorial(n int) int {
    if n == 0 {
        return 1
    }
    return n * factorial(n - 1)
}
medium
A. 6
B. 3
C. 0
D. 1

Solution

  1. Step 1: Trace recursive calls for factorial(3)

    factorial(3) = 3 * factorial(2) factorial(2) = 2 * factorial(1) factorial(1) = 1 * factorial(0) factorial(0) = 1 (base case)
  2. Step 2: Calculate return values step-by-step

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

    6 -> Option A
  4. Quick Check:

    3! = 6 [OK]
Hint: Multiply n by factorial(n-1) until n=0 [OK]
Common Mistakes:
  • Forgetting base case returns 1
  • Multiplying incorrectly in recursive step
  • Confusing factorial with addition
4. Identify the error in this recursive Go function to compute the sum of numbers from 1 to n:
func sum(n int) int {
    if n == 1 {
        return 1
    }
    return n + sum(n)
}
medium
A. Base case condition is incorrect
B. Function should return n * sum(n-1)
C. Recursive call does not reduce n, causing infinite recursion
D. Return statement should be outside the if block

Solution

  1. Step 1: Analyze recursive call argument

    The function calls sum(n) again without reducing n, so it never reaches base case.
  2. Step 2: Identify infinite recursion cause

    Recursive call must use sum(n-1) to reduce n and eventually stop at base case.
  3. Final Answer:

    Recursive call does not reduce n, causing infinite recursion -> Option C
  4. Quick Check:

    Recursive argument must decrease to reach base case [OK]
Hint: Recursive calls must reduce input to reach base case [OK]
Common Mistakes:
  • Calling recursion with same argument
  • Wrong base case value
  • Misplacing return statement
5. Given this recursive Go function to reverse a string, what is the output of reverse("go")?
func reverse(s string) string {
    if len(s) == 0 {
        return ""
    }
    return reverse(s[1:]) + string(s[0])
}
hard
A. "go"
B. "og"
C. ""
D. Runtime error

Solution

  1. Step 1: Trace recursive calls for reverse("go")

    reverse("go") calls reverse("o") + "g" reverse("o") calls reverse("") + "o" reverse("") returns "" (base case)
  2. Step 2: Combine return values step-by-step

    reverse("") = "" reverse("o") = "" + "o" = "o" reverse("go") = "o" + "g" = "og"
  3. Final Answer:

    "og" -> Option B
  4. Quick Check:

    String reversed = "og" [OK]
Hint: Reverse substring then add first char at end [OK]
Common Mistakes:
  • Confusing substring slicing
  • Forgetting base case returns empty string
  • Concatenating in wrong order
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