The droste effect is an example of Recursion.

Recursion is the process of repeating items in a self-similar way. Recursion can be implemented in Scratch by making a block that uses itself. This can be used to create fractals. A fractal is pattern that produces a picture, which can be zoomed into infinity and will still produce the same picture. Some common examples of fractals are the Mandelbrot set, the Sierpinski Triangle, and the Koch Snowflake.

## Creating the Koch Curve

The Koch Curve is a fractal that can be created relatively easily in Scratch. The Koch Curve is part of a larger fractal, the Koch Snowflake.

### Understanding Recursion in the Koch Curve

The Koch Curve.

The Koch Curve is made of four Koch Curves that are a third of the size of the original Koch Curve. They are they are arranged so that the first and fourth are flat and the middle two point up to make an equilateral that is triangle missing one side.

To make it easier to draw, the Koch Curve can be broken down into iterations, each one more complicated than the last. The first iteration is made up of four straight lines. The second iteration contains four copies of the first iteration. The third iteration contains four copies of the second iteration or sixteen copies of the first iteration. As iterations are added it gets more complicated and looks more and more like the real Koch Curve.

### Implementing it in Scratch

#### Basic Pen Path without Recursion

The triangle in the center is an equilateral triangle, therefore each of it's angles have a measure of 60°.

Using basic geometry the angles of the rotations the sprite must make can be found.

Using this these angles, a script can be created that draws the first iteration of Koch Curve. Since each line segment is 1/3 the total length of the Koch Curve, the sprite should move 1/3 of the length given each time.

```when gf clicked
point in direction (90) //make sure the sprite is pointed right
go to x: (-240) y: (-179) //put the sprite in the lower left corner
clear //clear graphics from previous runs
pen down //put the pen down for drawing
make the first iteration of the Koch Curve with a length of (480)
pen up //put the pen up so movement afterwards is not recorded

define make the first iteration of the Koch Curve with a length of (length)
move ((length) / (3)) steps //draw a line segment
turn ccw (60) degrees //first turn
move ((length) / (3)) steps //draw a line segment
turn cw (120) degrees //second turn
move ((length) / (3)) steps //draw a line segment
turn ccw (60) degrees //third turn
move ((length) / (3)) steps //draw a line segment
```

To add recursion, instead of drawing a line, a smaller Koch Curve can be drawn. When each iteration above one is drawn, it contains four smaller Koch Curves that are one iteration less than it self. For example, when drawing the second iteration you must draw four copies that are 1/3 the size of the first iteration. When the program gets to the first iteration it must draw straight lines. The following code will make the fifth iteration of the Koch Curve

```when gf clicked
point in direction (90) //make sure the sprite is pointed right
go to x: (-240) y: (-179) //put the sprite in the lower left corner
clear //clear graphics from previous runs
pen down //put the pen down for drawing
make the (5) iteration of the Koch Curve with a length of (480)
pen up //put the pen up so movement afterwards is not recorded

define make the (iteration) iteration of the Koch Curve with a length of (length)
if <(iteration) = [1]> then //is it the first iteration?
move ((length) / (3)) steps //draw a line segment
else
make the ((iteration) - (1)) iteration of the Koch Curve with a length of ((length) / (3)) //make a smaller Koch  Curve
end
turn ccw (60) degrees //first turn
if <(iteration) = [1]> then //is it the first iteration?
move ((length) / (3)) steps //draw a line segment
else
make the ((iteration) - (1)) iteration of the Koch Curve with a length of ((length) / (3)) //make a smaller Koch  Curve
end
turn cw (120) degrees //second turn
if <(iteration) = [1]> then //is it the first iteration?
move ((length) / (3)) steps //draw a line segment
else
make the ((iteration) - (1)) iteration of the Koch Curve with a length of ((length) / (3)) //make a smaller Koch  Curve
end
turn ccw (60) degrees //third turn
if <(iteration) = [1]> then //is it the first iteration?
move ((length) / (3)) steps //draw a line segment
else
make the ((iteration) - (1)) iteration of the Koch Curve with a length of ((length) / (3)) //make a smaller Koch  Curve
end
```

## Creating the Mandelbrot Set

The Mandelbrot set is a mathematical fractal defined in the complex plane. It was named after its discoverer, Benoit Mandelbrot, and has many close relationships to the Julia Sets.