@extends('template')
@section('title')
Lab 11: Part 2A: Recursive Turtles
@stop
@section('content')
# Lab 11: Part 2A: Recursive Turtles
The [turtle section of our quick-reference page](/reference/quickref#turtle)
has information about the available `turtle` and `turtleBeads` drawing
commands.
The [ Turtle module
API](https://docs.python.org/3/library/turtle.html) is the official
Python documentation for the `turtle` module.
## Setup
In the `lab11` folder, open `recursiveTurtles.py`.
At the bottom of the starter file is a function `run`, which invokes
`setupTurtle`. The invocations of the functions you write (e.g., `row()`)
will go inside `run()`. This is how you will test your turtle functions today.
## Task 1. The provided `square` function and how to test
```py
def square(length):
"""Draws a square of size length maintains heading
and position invariant"""
for _ in range(4):
fd(length)
lt(90)
```
```py
# WRITE YOUR FUNCTIONS HERE
```
...then invoke `square` in the `run` function.
How to test your functions:
1. Call your function from within the `run` function (near the bottom of your file)
2. Run your file in Thonny
3. This will automatically call the `run` function, which in turn will call your function.
Do a test run with `square` by calling `square` from within `run`.
Note that there is a `test_recursiveTurtles.py` file in your `lab09`
folder, but it does **not** include tests for all the functions and the
tests rely on drawing lines in a certain order, which you do not
necessarily have to follow. So, for today, it is better to test by calling your
functions from within the `run` function.
{{--
--}}
## Task 2: Row of squares
Partner A
Write a recursive method called `row(number, size)` that draws a horizontal row of `number` squares of size `size`.
**This function must be recursive and maintain a position and heading invariant.**
FYI: In the example screenshots below, the Turtle's pen was set to red ( via `pencolor('red')`), but your pen color will be black by default.
row(3, 50)
row(5,25)
## Task 3: Spaced row of squares
Partner B
Write a recursive method called `spacedRow(number, size)` that draws a horizontal row of `number` squares of size `size` with a constant space of `size/4` between each square.
**This function must be recursive and maintain a position and heading invariant.**
spacedRow(3,50)
spacedRow(5,25)
## Task 4: Decreasing row of squares
Partner A
Write a recursive method called `decreasingRow(number,size)` that draws a horizontal row of `number` squares. The first square has size `size` and each subsequent square is half the size of the previous one.
**This function must be recursive and maintain a position and heading invariant.**
decreasingRow(3,100)
decreasingRow(5,100)
## Task 5: Nested squares
Partner B
Write a recursive method called `nestedSquares(number,size)` that draws `number` nested squares. The largest square has size `size` and each subsequent square is half the size of the previous one. The squares are anchored in the lower left corner.
**This function must be recursive and maintain a position and heading invariant.**
nestedSquares(3,90)
nestedSquares(5,130)
## Task 6: Diagonal squares
Partner A
Write a recursive method called `diagonal(number,size)` that draws `number` decreasing diagonal squares. The largest square has size `size` and each subsequent square is half the size of the previous one.
**This function must be recursive and maintain a position and heading invariant.**
diagonal(1,100)
diagonal(2,100)
diagonal(3,100)
## Task 7: Double Diagonal squares
Partner B
Write a recursive method called `doubleDiagonal(number,size)` that draws `number` decreasing diagonal squares. The largest square has size `size` and each subsequent square is half the size of the previous one. Each recursive call draws **two** new squares: one anchored at the upper right corner and the other anchored at the lower left corner.
**This function must be recursive and maintain a position and heading invariant.**
doubleDiagonal(1,100)
doubleDiagonal(2,100)
doubleDiagonal(3,100)
doubleDiagonal(4,100)
{{--
--}}
## Task 8: Super diagonal squares
Partner A
Write a recursive method called `superDiagonal(number,size)` that draws `number` decreasing diagonal squares. The largest square has size `size` and each subsequent square is half the size of the previous one. In `superDiagonal`, squares are placed on the diagonal at both the upper right corner and the lower left corner. **Note**: `superDiagonal` will not invoke `diagonal`.
**This function must be recursive and maintain a position and heading invariant.**