#
Homework 6

*Due at 11:59:59 pm on Sunday, 3/14/2021.*

## Instructions

Download hw06.zip. Inside the archive, you will find starter files for the questions in this homework, along with a copy of the OK autograder.

**Submission:** When you are done, submit with `python3 ok --submit`

. You may submit more than once before the deadline; only the final submission will be scored. Check that you have successfully submitted your code on okpy.org. See this article for more instructions on okpy and submitting assignments.

**Readings:** This homework relies on following references:

## Recursion

### Question 1: Decimal

Write the recursive version of the function `decimal`

which takes in `n`

, a number, and returns a list representing the decimal representation of the number.

```
def decimal(n):
"""Return a list representing the decimal representation of a number.
>>> decimal(55055)
[5, 5, 0, 5, 5]
>>> decimal(-136)
['-', 1, 3, 6]
"""
"*** YOUR CODE HERE ***"
```

Use OK to test your code:

`python3 ok -q decimal`

### Question 2: Hailstone

For the `hailstone`

function from previously, you pick a positive
integer `n`

as the start. If `n`

is even, divide it by 2. If `n`

is
odd, multiply it by 3 and add 1. Repeat this process until `n`

is 1.
Write a recursive version of hailstone that prints out the values of
the sequence and returns the number of steps.

```
def hailstone_iterative(n):
"""Print out the hailstone sequence starting at n, and return the
number of elements in the sequence.
>>> a = hailstone_iterative(10)
10
5
16
8
4
2
1
>>> a
7
"""
"*** YOUR CODE HERE ***"
def hailstone_recursive(n):
"""Print out the hailstone sequence starting at n, and return the
number of elements in the sequence.
>>> a = hailstone_recursive(10)
10
5
16
8
4
2
1
>>> a
7
"""
"*** YOUR CODE HERE ***"
```

Use OK to test your code:

```
python3 ok -q hailstone_iterative
python3 ok -q hailstone_recursive
```

### Question 3: is_palindrome

Write a recursive solution for the function `is_palindrome`

such that it takes in any list and returns True if that list is the same way going forwards and backwards.

```
def is_palindrome(lst):
""" Returns True if the list is a palindrome. A palindrome is a list
that reads the same forwards as backwards
>>> is_palindrome([1, 2, 3, 4, 5])
False
>>> is_palindrome(["p", "a", "l", "i", "n", "d", "r", "o", "m", "e"])
False
>>> is_palindrome([True, False, True])
True
>>> is_palindrome([])
True
>>> is_palindrome(["a", "l", "a", "s", "k", "a"])
False
>>> is_palindrome(["r", "a", "d", "a", "r"])
True
>>> is_palindrome(["f", "o", "o", "l", "p", "r", "o", "o", "f"])
False
>>> is_palindrome(["a", "v", "a"])
True
>>> is_palindrome(["racecar", "racecar"])
True
>>> is_palindrome(["r", "a", "c", "e", "c", "a", "r"])
True
"""
"*** YOUR CODE HERE ***"
```

Use OK to test your code:

`python3 ok -q is_palindrome`

## Submit

Make sure to submit this assignment by running:

`python3 ok --submit`