DSA: Basics of Recursion, Pointers, and Dynamic Allocation