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?
There's the new line after the for loop to make sure that the next recursion starts on a fresh line. Otherwise the next recursion would print on the same line, right where it left off, and you'd just have a line of "#"'s. The for loop itself is just for printing "#"'s.
Why is n incremented and not i as stated with i++?
I think this is a confusion with the recursion. Look at the line with draw(n - 1);
this happens before any printing of hashes happens, and only continues after its done. And it calls itself as long as it's not less than or equal to 0. To psuedo-code the order of operations here:
draw 3 {
draw 2 {
draw 1 {
draw 0 {};
print "#" * 1;
};
print "#" * 2;
};
print "#" *3;
};
so n is never incremented as you think, it just calls decremented versions of the draw function before the current one finishes. The i's are purely involved in the for loop, which only prints hashes. Does that make sense?