I used the debugger to examine this code but not understanding a couple areas.

  1. Why does the for loop repeat after it exits to print a new line? If it exits the loop, shouldn’t it be done with it?
  2. Why is n incremented and not i as stated with i++?

int main(void)
{
    int height = get_int("Height: ");

    draw(height);
}

void draw(int n)
{
    if (n <= 0)
    {
        return;
    }

    draw(n - 1);

    for (int i = 0; i < n; i++)
    {
        printf("#");
    }
    printf("\n");
}
  • milon@lemm.eeOP
    link
    fedilink
    arrow-up
    1
    ·
    11 months ago

    I see. I guess my understanding was that the recursion was over after the recursive call, but it’s actually for all the code in draw().

    • Merwyn@sh.itjust.works
      link
      fedilink
      arrow-up
      2
      ·
      11 months ago

      Yes, to better understand this you have to understand the “flow” of the program. Meaning the order at which the instructions are executed and not written.

      Here you have the flow of the program starting from n =3 until the recursion reach draw(0), note that none of the for loop have been executed yet. At this point it reach the first “return” instruction and go finish the call to draw(0).

      Then the flow go back to where it previously was: inside the draw(1) call just after the line calling draw(0). And it start executing the next lines of the draw(1): the for loop.

      Then it reach the second “return” and proceed again until the whole program is over.

      • milon@lemm.eeOP
        link
        fedilink
        arrow-up
        1
        ·
        11 months ago

        Yes, that helps. Thanks. I see now how n goes from 1 to 2 to 3…etc. Now not so sure how i = 1 when the for loop starts.

        • Merwyn@sh.itjust.works
          link
          fedilink
          arrow-up
          1
          ·
          11 months ago

          When called with n=1 ? It’s from i=0 to i<1, so it will do only one iteration with i=0 and print one #.