# Recursion

## Reading

## Key ideas

### From chapter 15:

A recursive algorithm must obey 3 laws:

- A recursive algorithm must have a base case.
- A recursive algorithm must change its state and move toward the base case.
- A recursive algorithm must call itself, recursively.

### From chapter 10:

todo

## Active learning

### Activity 1

- Download draw_tree.py . Run it. Then:
- Add descriptive comments to the commands inside
`main()`

. - Try to understand
`tree(branchLen, t)`

. What is the base case? - If a call to
`tree`

is not at the base case, how does it change its state to move toward the base case?

### Activity 2

- Experiment with convert.py until you fully understand it.
- What is the base case?
- What is the general case?
- Verify that the answers produced for the three test cases are correct.
- Explain why
`print(convert(100, 1))`

produces an error. - Explain why
`print(convert(100, 200))`

produces an error. - What is the largest base for which the convert function is correct?
- Uncomment the three statements and supply the missing
`unconvert`

function. The function should be recursive and take two parameters. The first parameter is a string representation of a number and the second parameter is the base of the first parameter. The function should calculate and return the base 10 integer equivalent of the first parameter.

### Activity 3

- Download alternating.py