![]() |
VOOZH | about |
Recursion is a fundamental concept in computer science, where a function calls itself to solve smaller instances of a problem. Recursion is commonly applied in problems involving trees, graphs, and divide-and-conquer algorithms.
Recursion is a process where a function calls itself to solve a problem by breaking it down into smaller instances.
For example: calculating the factorial of 4 using recursion
👁 LightboxThe base case is the condition that stops the recursion, while the recursive case is where the function calls itself with a simpler or smaller input.
Yes, a recursive function can have multiple base cases, each handling different stopping conditions for recursion.
Iteration uses loops to repeat operations, while recursion involves a function calling itself. Recursion often leads to cleaner solutions but can use more memory due to function calls.
A stack overflow occurs when the recursion depth exceeds the call stack limit, typically due to missing base case or excessive recursion depth.
Recursion uses more memory to store data for each recursive call in the function call stack. Each function call adds a record to the stack, following the LIFO structure. When a function calls itself, memory for the child function is allocated on top of the parent function's memory, with separate copies of local variables for each call. Once the base case is reached, the child function returns its value and is de-allocated, continuing the process.
Recursion can be optimized using techniques like tail recursion (where the recursive call is the last operation) or memoization (storing results of subproblems to avoid redundant calculations).
Memoization stores the results of expensive recursive calls so that repeated calls with the same input can return the cached result instead of recalculating it. This reduces time complexity in problems like the Fibonacci sequence and dynamic programming.
Tail recursion occurs when a function calls itself at the very end of its execution, with no further computation needed after the recursive call returns. In this case, the function’s result is returned directly from the recursive call.
Tail recursion is beneficial because it can be optimized by compilers, reducing the space complexity of recursive functions. In some languages, it is optimized to run as efficiently as an iterative loop.
Direct recursion occurs when a function calls itself, while indirect recursion occurs when a function calls another function that eventually calls the original function.
Read more about different types of recusrion Refer, Types of Recursion
The time complexity of a recursive algorithm depends on the number of recursive calls and the work done at each step. It's often represented by a recurrence relation:
Mutual recursion occurs when two or more functions call each other in a cyclic manner. For example: Function A() calls B(), and B() calls A().
Recursion is a general problem-solving technique, while backtracking is a specialized form of recursion where we explore possibilities and revert (backtrack) when a condition is not met.
The following list of 50 recursion coding problems covers a range of difficulty levels, from easy to hard, to help candidates prepare for interviews.
Top 50 Problems on Recursion Algorithm asked in SDE Interviews