Stack Practice questions

Duration: 5 min

This video lesson is available to enrolled students.

Enroll to watch — ISRO Scientist/Engineer 'SC'

AI Summary

An AI-generated summary of this video lecture.

This educational video demonstrates how to trace the execution of a recursive C function to determine its output. The instructor presents a code snippet containing a function named `print(int n)` which includes a base case check `if (n > 4000)`. The function prints the current value of `n`, calls itself recursively with `2*n`, and then prints `n` again. The `main` function initiates this process by calling `print(1000)`. The lecture focuses on manually stepping through the recursion stack to predict the sequence of numbers printed to the console.

Chapters

  1. 0:00 2:00 00:00-02:00

    The instructor begins by analyzing the provided C code, specifically the `print` function. He writes `print(1000)` on the whiteboard to represent the initial call from `main`. He evaluates the condition `if (n > 4000)` for `n=1000`, marking it as false. Consequently, the code proceeds to the first `printf("%d ", n)`, which outputs `1000`. He then identifies the next step as a recursive call `print(2*n)`, which becomes `print(2000)`. He starts drawing a tree diagram to visualize the call stack, placing `1000` as the root and `print(2000)` as the child node.

  2. 2:00 4:37 02:00-04:37

    Continuing the trace, the instructor evaluates `print(2000)`. The condition `2000 > 4000` is false, so it prints `2000` and calls `print(4000)`. Next, `print(4000)` is evaluated; `4000 > 4000` is false, so it prints `4000` and calls `print(8000)`. The instructor notes that `print(8000)` satisfies the base case `8000 > 4000`, causing the function to return immediately without printing. The execution then unwinds. The second `printf` in `print(4000)` executes, printing `4000`. Then the second `printf` in `print(2000)` executes, printing `2000`. Finally, the second `printf` in `print(1000)` executes, printing `1000`. The final sequence is `1000 2000 4000 4000 2000 1000`, corresponding to option (B).

The lesson effectively illustrates the two-phase nature of recursion: the forward pass where code executes before the recursive call, and the backward pass where code executes after the call returns. By tracing the specific values `1000`, `2000`, `4000`, and the base case `8000`, the instructor demonstrates how the first set of prints creates an ascending sequence while the return phase creates a descending sequence, resulting in a symmetric output pattern.