Bird
Raised Fist0
DSA Javaprogramming~10 mins

Recursion Concept and Call Stack Visualization in DSA Java - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to make the recursive method call itself with a smaller number.

DSA Java
public int factorial(int n) {
    if (n == 0) {
        return 1;
    } else {
        return n * factorial([1]);
    }
}
Drag options to blanks, or click blank then click option'
An
Bn + 1
Cn - 1
D0
Attempts:
3 left
💡 Hint
Common Mistakes
Using n + 1 causes infinite recursion.
Using n causes no change and infinite recursion.
2fill in blank
medium

Complete the code to correctly check the base case for the recursive Fibonacci method.

DSA Java
public int fibonacci(int n) {
    if (n <= [1]) {
        return n;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}
Drag options to blanks, or click blank then click option'
A2
B1
C0
Dn
Attempts:
3 left
💡 Hint
Common Mistakes
Using 0 as base case alone misses the 1 case.
Using n as base case causes infinite recursion.
3fill in blank
hard

Fix the error in the recursive sum method by completing the base case condition.

DSA Java
public int sum(int[] arr, int index) {
    if (index [1] arr.length) {
        return 0;
    } else {
        return arr[index] + sum(arr, index + 1);
    }
}
Drag options to blanks, or click blank then click option'
A>=
B<=
C>
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using > causes index out of bounds error.
Using < causes the method to always return 0.
4fill in blank
hard

Fill both blanks to complete the recursive method that prints numbers from n down to 1.

DSA Java
public void printNumbers(int n) {
    if (n [1] 0) {
        return;
    }
    System.out.println(n);
    printNumbers(n [2] 1);
}
Drag options to blanks, or click blank then click option'
A<=
B-
C>
D+
Attempts:
3 left
💡 Hint
Common Mistakes
Using + instead of - causes infinite recursion.
Using <= in the if condition causes wrong stopping point.
5fill in blank
hard

Fill all three blanks to complete the recursive method that reverses a string.

DSA Java
public String reverse(String str) {
    if (str.length() == 0) {
        return "";
    }
    return str.charAt([1]) + reverse(str.[2]([3], str.length() - 1));
}
Drag options to blanks, or click blank then click option'
Astr.length() - 1
Bsubstring
C0
Dlength
Attempts:
3 left
💡 Hint
Common Mistakes
Using 0 as index gets first character, not last.
Using length as substring argument causes error.

Practice

(1/5)
1. What happens when a recursive function calls itself without a stopping condition?
easy
A. It converts into a loop automatically.
B. It runs only once and stops automatically.
C. It causes infinite recursion leading to a stack overflow error.
D. It returns null immediately.

Solution

  1. Step 1: Understand recursion without base case

    A recursive function without a stopping condition keeps calling itself endlessly.
  2. Step 2: Effect on call stack

    Each call adds a new frame to the call stack until memory runs out, causing a stack overflow error.
  3. Final Answer:

    It causes infinite recursion leading to a stack overflow error. -> Option C
  4. Quick Check:

    Missing base case = stack overflow [OK]
Hint: Always check for a base case to stop recursion [OK]
Common Mistakes:
  • Assuming recursion stops automatically
  • Thinking recursion converts to loop
  • Believing it returns null without base case
2. Which of the following is the correct syntax to define a recursive method in Java?
easy
A. public void recurse() { recurse(); }
B. public void recurse() { return recurse(); }
C. public void recurse() { if(true recurse(); }
D. public void recurse() { recurse; }

Solution

  1. Step 1: Check method call syntax

    public void recurse() { recurse(); } correctly calls the method recurse() inside itself using parentheses.
  2. Step 2: Identify syntax errors in other options

    public void recurse() { return recurse(); } tries to return void method call, invalid. public void recurse() { if(true recurse(); } missing parenthesis after if condition, invalid syntax. public void recurse() { recurse; } misses parentheses, invalid call.
  3. Final Answer:

    public void recurse() { recurse(); } -> Option A
  4. Quick Check:

    Method call needs parentheses [OK]
Hint: Recursive calls must use parentheses like normal method calls [OK]
Common Mistakes:
  • Omitting parentheses in recursive call
  • Returning void method call
  • Using invalid syntax inside method
3. What will be the output of the following Java code?
public class Test {
  public static void printNumbers(int n) {
    if (n == 0) return;
    System.out.print(n + " ");
    printNumbers(n - 1);
  }
  public static void main(String[] args) {
    printNumbers(3);
  }
}
medium
A. 1 2 3
B. 0 1 2 3
C. 3 2 1 0
D. 3 2 1

Solution

  1. Step 1: Trace recursive calls and prints

    printNumbers(3) prints 3, then calls printNumbers(2), prints 2, calls printNumbers(1), prints 1, then calls printNumbers(0) which returns.
  2. Step 2: Output order

    Numbers print before recursive call, so output is "3 2 1 " with no zero printed.
  3. Final Answer:

    3 2 1 -> Option D
  4. Quick Check:

    Print before recursion = descending order [OK]
Hint: Print before recursion call prints descending sequence [OK]
Common Mistakes:
  • Expecting ascending order output
  • Including zero in output
  • Confusing print order with recursion
4. Identify the error in the following recursive Java method and select the fix:
public static int factorial(int n) {
  if (n == 1) return 1;
  else return n * factorial(n);
}
medium
A. Add print statement before recursive call
B. Change recursive call to factorial(n - 1)
C. Change base case to if (n == 0) return 0
D. Change return type to void

Solution

  1. Step 1: Analyze recursive call parameter

    The method calls factorial(n) again without reducing n, causing infinite recursion.
  2. Step 2: Correct recursive call

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

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

    Recursive call must reduce parameter [OK]
Hint: Recursive calls must move toward base case by changing parameters [OK]
Common Mistakes:
  • Calling factorial with same argument causing infinite recursion
  • Wrong base case value
  • Changing return type unnecessarily
5. Consider the following recursive method to compute the sum of digits of a positive integer:
public static int sumDigits(int n) {
  if (n == 0) return 0;
  return (n % 10) + sumDigits(n / 10);
}

What is the output of sumDigits(1234) and explain how the call stack evolves?
hard
A. 10; Calls: sumDigits(1234) -> sumDigits(123) -> sumDigits(12) -> sumDigits(1) -> sumDigits(0)
B. 1234; Calls: sumDigits(1234) only once
C. 0; Calls: sumDigits(0) only
D. 15; Calls: sumDigits(1234) -> sumDigits(123) -> sumDigits(12) -> sumDigits(1) -> sumDigits(0)

Solution

  1. Step 1: Trace recursive calls and sums

    sumDigits(1234) = 4 + sumDigits(123), sumDigits(123) = 3 + sumDigits(12), sumDigits(12) = 2 + sumDigits(1), sumDigits(1) = 1 + sumDigits(0), sumDigits(0) = 0.
  2. Step 2: Calculate total sum and call stack order

    Total sum = 4+3+2+1+0 = 10. The call stack grows with calls: 1234 -> 123 -> 12 -> 1 -> 0, then unwinds adding digits.
  3. Final Answer:

    10; Calls: sumDigits(1234) -> sumDigits(123) -> sumDigits(12) -> sumDigits(1) -> sumDigits(0) -> Option A
  4. Quick Check:

    Sum digits = 10, call stack grows with decreasing n [OK]
Hint: Sum digits by adding last digit and recurse on rest [OK]
Common Mistakes:
  • Adding digits incorrectly
  • Misunderstanding call stack order
  • Confusing sum with original number
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