## Instructions

Download hw05.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:

### Question 1: 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
"""

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
"""

Use OK to test your code:

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

### Question 2: 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
"""
``python3 ok -q is_palindrome``