Bird
Raised Fist0
DSA Pythonprogramming~20 mins

Why Recursion Exists and What Loops Cannot Express Cleanly in DSA Python - Challenge Your Understanding

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Recursion Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Recursive Factorial Function
What is the output of this Python code that calculates factorial using recursion?
DSA Python
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

print(factorial(4))
A120
B10
CError: maximum recursion depth exceeded
D24
Attempts:
2 left
💡 Hint
Factorial of 4 is 4 * 3 * 2 * 1.
🧠 Conceptual
intermediate
2:00remaining
Why Recursion Can Express Problems Loops Cannot Easily Handle
Which of the following problems is best solved using recursion rather than loops?
ATraversing a tree data structure
BCalculating the sum of numbers from 1 to 100
CPrinting numbers from 1 to 10
DFinding the maximum number in a list
Attempts:
2 left
💡 Hint
Think about problems with nested or branching structures.
🔧 Debug
advanced
2:00remaining
Identify the Error in Recursive Fibonacci Implementation
What error will this code produce when run?
DSA Python
def fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib(n-1) + fib(n-2)

print(fib(-1))
AReturns 0
BReturns 1
CRecursionError: maximum recursion depth exceeded
DTypeError: unsupported operand type(s)
Attempts:
2 left
💡 Hint
What happens if n is negative in this recursive function?
❓ Predict Output
advanced
2:00remaining
Output of Recursive Directory Size Calculation
Given this simplified recursive function to calculate total file sizes in nested folders, what is the output?
DSA Python
def folder_size(folder):
    total = 0
    for item in folder:
        if isinstance(item, int):
            total += item
        else:
            total += folder_size(item)
    return total

nested_folder = [10, [5, 15], 20, [5, [10]]]
print(folder_size(nested_folder))
ATypeError
B65
CSyntaxError
D55
Attempts:
2 left
💡 Hint
Add all integers, including those inside nested lists.
🧠 Conceptual
expert
2:00remaining
Why Some Recursive Problems Cannot Be Transformed Easily into Loops
Which statement best explains why some recursive problems cannot be easily rewritten as loops?
ALoops cannot call themselves, so they cannot handle nested or branching structures naturally.
BLoops cannot perform any calculations involving multiple variables.
CLoops use more memory than recursion.
DLoops are slower than recursion in all cases.
Attempts:
2 left
💡 Hint
Think about the nature of recursion calling itself versus loops repeating code.

Practice

(1/5)
1. Why do we use recursion instead of loops in some problems?
easy
A. Because recursion can handle problems with self-similar subproblems naturally
B. Because loops are slower than recursion in all cases
C. Because recursion uses less memory than loops always
D. Because loops cannot repeat tasks

Solution

  1. Step 1: Understand recursion's nature

    Recursion breaks a problem into smaller similar problems, calling itself to solve each part.
  2. Step 2: Compare with loops

    Loops repeat tasks but do not naturally express problems that divide into smaller similar parts.
  3. Final Answer:

    Because recursion can handle problems with self-similar subproblems naturally -> Option A
  4. Quick Check:

    Recursion = natural for self-similar problems [OK]
Hint: Recursion fits problems breaking into smaller similar parts [OK]
Common Mistakes:
  • Thinking loops are always slower
  • Assuming recursion always uses less memory
  • Believing loops cannot repeat tasks
2. Which of the following is the correct syntax to define a recursive function in Python?
easy
A. def recurse(n): while n > 0: return n * recurse(n-1)
B. def recurse(n): if n == 0: return 1 else: return n * recurse(n-1)
C. def recurse(n): for i in range(n): return recurse(i)
D. def recurse(n): return n * recurse(n+1)

Solution

  1. Step 1: Check base case and recursive call

    def recurse(n): if n == 0: return 1 else: return n * recurse(n-1) has a base case (n == 0) and calls itself with smaller n (n-1), correct recursion pattern.
  2. Step 2: Verify other options

    Options A and C misuse loops inside recursion; D calls recurse with n+1 causing infinite recursion.
  3. Final Answer:

    def recurse(n): if n == 0: return 1 else: return n * recurse(n-1) -> Option B
  4. Quick Check:

    Base case + smaller recursive call = correct recursion [OK]
Hint: Look for base case and smaller recursive call [OK]
Common Mistakes:
  • Missing base case causing infinite recursion
  • Using loops incorrectly inside recursion
  • Calling recursion with increasing argument
3. What is the output of this code?
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

print(factorial(4))
medium
A. 24
B. 10
C. Error
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) returns 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: Factorial of 4 is 24 [OK]
Common Mistakes:
  • Confusing factorial with sum
  • Forgetting base case returns 1
  • Expecting 120 which is 5!
4. Find the error in this recursive function that tries to sum numbers from n down to 1:
def sum_down(n):
    if n == 1:
        return 1
    else:
        return n + sum_down(n)

print(sum_down(3))
medium
A. Missing base case for n == 0
B. Return statement should be outside else block
C. Recursive call uses n instead of n-1 causing infinite recursion
D. Function should use a loop instead of recursion

Solution

  1. Step 1: Check recursive call argument

    The function calls sum_down(n) again without reducing n, causing infinite recursion.
  2. Step 2: Identify fix

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

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

    Recursive call must reduce argument [OK]
Hint: Recursive call argument must decrease to reach base case [OK]
Common Mistakes:
  • Not reducing argument in recursive call
  • Missing base case for zero
  • Thinking loops are required here
5. You want to print all subsets of a set using recursion. Why is recursion better than loops here?
hard
A. Because loops cannot print output
B. Because loops cannot iterate over sets
C. Because recursion uses less memory than loops for subsets
D. Because subsets require exploring all combinations, which is naturally expressed by recursive branching

Solution

  1. Step 1: Understand subsets generation

    Generating subsets means choosing to include or exclude each element, creating a branching tree of possibilities.
  2. Step 2: Compare recursion and loops

    Recursion naturally handles branching by calling itself twice per element; loops struggle to express this branching clearly.
  3. Final Answer:

    Because subsets require exploring all combinations, which is naturally expressed by recursive branching -> Option D
  4. Quick Check:

    Recursive branching fits subsets generation [OK]
Hint: Subsets = branching choices, recursion models branching well [OK]
Common Mistakes:
  • Thinking loops cannot iterate sets
  • Assuming recursion always uses less memory
  • Believing loops cannot print
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