Lab 5: Abstract Data Types, Recursion
Due by 11:59pm on Friday, February 27.
Starter Files
Download lab05.zip.
Required Questions
Recursion!
Q1: Symmetric List
A list is symmetric if it is the same from left to right as from right to left.
For example, [1, 2, 3, 4, 3, 2, 1] is symmetric. Implement symmetric, a
function that takes list l and check if l is a symmetric list, Use
recursion!
def symmetric(l):
"""Returns whether a list is symmetric.
>>> symmetric([])
True
>>> symmetric([1])
True
>>> symmetric([1, 4, 5, 1])
False
>>> symmetric([1, 4, 4, 1])
True
>>> symmetric(['l', 'o', 'l'])
True
"""
"*** YOUR CODE HERE ***"
Use Ok to test your code:
python3 ok -q symmetric
Q2: GCD
The greatest common divisor of two positive integers a and b is the
largest integer which evenly divides both numbers (with no remainder).
Euclid, a Greek mathematician in 300 B.C., realized that the greatest
common divisor of a and b is one of the following:
- the smaller value if it evenly divides the larger value, or
- the greatest common divisor of the smaller value and the remainder of the larger value divided by the smaller value
In other words, if a is greater than b and a is not divisible by
b, then
gcd(a, b) = gcd(b, a % b)
Write the gcd function recursively using Euclid's algorithm.
def gcd(a, b):
"""Returns the greatest common divisor of a and b.
Should be implemented using recursion.
>>> gcd(34, 19)
1
>>> gcd(39, 91)
13
>>> gcd(20, 30)
10
>>> gcd(40, 40)
40
"""
"*** YOUR CODE HERE ***"
Use Ok to test your code:
python3 ok -q gcd
Q3: Has Seven
Write a recursive function has_seven that takes a positive integer n and
returns whether n contains the digit 7. Use recursion - the tests will
fail if you use any assignment statements.
def has_seven(k):
"""Returns True if at least one of the digits of k is a 7, False otherwise.
>>> has_seven(3)
False
>>> has_seven(7)
True
>>> has_seven(2734)
True
>>> has_seven(2634)
False
>>> has_seven(374)
True
>>> has_seven(140)
False
>>> from construct_check import check
>>> # ban all assignments
>>> check(SOURCE_FILE, 'has_seven',
... ['Assign', 'AugAssign'])
True
"""
"*** YOUR CODE HERE ***"
Use Ok to test your code:
python3 ok -q has_seven
Check Your Score Locally
You can locally check your score on each question of this assignment by running
python3 ok --score
This does NOT submit the assignment! When you are satisfied with your score, submit the assignment to Gradescope to receive credit for it.
Submit Assignment
Submit this assignment by uploading any files you've edited to the appropriate Gradescope assignment. Lab 00 has detailed instructions.