I used the debugger to examine this code but not understanding a couple areas.
- 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?
- 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");
}
So you’re drawing a triangle of
#
that starts skinny in the top left and grows to the right with a height and width ofn
?As an example, Height 3 would be:
# ## ###
I’m not following your questions, but the code seems pretty reasonable… though the use of recursion feels pretty unnecessary when you could easily just use a nested for loop.
An example using a nested loop
$n = 3; for ($i = 0; $i <= $n; $i++) { for ($j = 0; $j < $i; $j++) { echo '#'; } echo "\n"; }
https://3v4l.org/e0IJm
It’s supposed to be a pyramid but not my code. It’s an example of a recursive function from a CS50 lecture and I’m just trying to understand how the code works line by line.
So is my example of Height 3 in line with your expectations?
Yep
I wrote an equivalent version just using nested loops - reading it might help you understand why the recursion works the way it does.
Thanks. I did see that. I have a general understanding of how recursion works I think where the function calls itself again and again but I don’t get why the code (for loop) below the draw(n - 1) is recursive.
The code below the
draw(n - 1)
isn’t recursive… the call todraw(n - 1)
is the recursion.Sometimes, it can be helpful to invert recursion. Think about what draw(0) would be and write it down… then compute draw(1) using the value you previously computed for draw(0).