Recursion occurs when a function invokes itself directly or indirectly to solve smaller sub-problems. In Unit 5 of MAKAUT C Programming (PPS-II), recursive algorithms, stack allocation frames, tail-call optimization, and call-tree traces are primary examination topics.

This guide provides deep structural clarity on stack call frames, recurrence relation derivations, and recursive implementations of Factorial, Fibonacci, GCD, and Indirect Recursion.

---

1. Mechanics of Recursion: Base Case & Stack Frames

Every valid recursive function must have two components:

  1. Base Case (Termination Condition): Halts recursion. Missing base cases cause Stack Overflow runtime crashes (Segmentation Fault).
  2. Recursive Step: Decreases problem size toward base case.

Stack Activation Trace for factorial(3):

c

---

2. Types of Recursion

  • Direct Recursion: Function A calls A.
  • Indirect Recursion: Function A calls B, and function B calls A.
  • Tail Recursion: The recursive call is the final statement executed. Compilers optimize tail recursion into simple loops to save memory.
  • Tree Recursion: Function makes multiple recursive calls per invocation (e.g., Fibonacci).

---

3. Recursion vs Iteration Comparison Table

AttributeRecursionIteration
Code StructureCompact & elegantMore verbose
Memory UsageHigh (O(N) call stack frames)Low (O(1) auxiliary space)
Execution OverheadFunction push/pop overheadSimple loop condition check

---

4. Solved Classic Recursive Programs

1. Recursive Factorial

c

---

2. Recursive Fibonacci & Call Tree Derivation

c

Recursive Call Tree for fibonacci(4):

c

*Complexity*: Time O(2^N), Space O(N).

---

3. Indirect Recursion Example

c