Yes, this is the key idea to understand in recursive procedures. You do seem to understand that very well.
Definitely relevant, but "iteration" doesn't describe it correctly. Think about trying to draw the fractal tree with a loop. While the program is drawing, let's say, a level 3 trunk (where the whole tree is level 6), it has to remember somehow which level 3 trunk it is (there are eight of them), i.e., what remains to be done after drawing this level 3 subtree. That information isn't represented explicitly in the code; it's remembered by virtue of the fact that while the level 3 tree is being drawn there's a level 4 invocation, a level 5 invocation, and the (toplevel) level 6 invocation, each of which remembers whether it's in the middle of its left branch or its right branch. Also, each of those invocations remembers how long a trunk it's supposed to draw, and therefore what the length input should be in its two recursive calls. And remember that there could be any number of branches, and they don't have to be symmetrical! Think about drawing this tree iteratively:
(made with my interactive tree project
). Each recursive call has to know what color it's drawing, how thick, how far up the trunk, etc. You could
do it iteratively by storing all that information in an explicit data structure, but I don't think that's what you were envisioning when you said "iteration." Reading your mind, you were thinking the recursive call means "go back to the top of this script." I always tell my students to listen for themselves thinking "go back" and immediately stop that thought before even finishing the sentence!
A recursive call that's the last thing that happens in a procedure is equivalent to an iteration, because if the procedure has no more work to do, it doesn't have to remember anything. But note that in a recursive reporter, it's not enough that the recursive call is in the REPORT instruction; it has to be the one that reports directly to the REPORT block. So,
iterative, because after the recursive call returns, the current
call has to multiply the value it reported by N. But this:
iterative, because the multiplication happens before
the recursive call.