factorial(n) - This function returns n!, the factorial of n. For instance,
factorial(5) should return 120.
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)sumList(L) - This function returns the sum of L, a list of integers. Hint: when
recursing on a list, we often use a list of length 0 or 1 as the base case. For the
general case we often try to go from a list of length n to a list of length n-1.
def sumList(L):
if len(L) == 0:
return 0
else:
return L[0] + sumList(L[1:])maxInList(L) - This function returns the largest value in L, a list of integers.
def maxInList(L):
if len(L) == 1:
return L[0]
else:
maxOfRest = maxInList(L[1:])
if L[0] > maxOfRest:
return L[0]
else:
return maxOfRestblastoff(n) - This function simulates a countdown to a rocket blasting off. If
you call blastoff(5) you should see the following output:
5...
4...
3...
2...
1...
BLASTOFF!!!
This is the first example we've seen of a recursive function called for its side effects, not for its return value. Still, you should approach this problem by looking for a base case and for how you can reduce the general problem into a smaller sub-problem.
def blastoff(n):
if n == 0:
print("BLASTOFF!!!")
else:
print("%d..." % n)
blastoff(n-1)getYNResponse() - This function should repeatedly prompt a user to enter 'y' or 'n', until
they actually enter 'y' or 'n'. We have written this function before using a while loop. How
can you replace the while loop with a recursive call?
def getYNResponse():
response = raw_input("Enter y or n: ")
if response in ["y", "n"]:
return response
else:
print("Invalid input.")
return getYNResponse()countLetter(s, l) - This function counts the occurences of the character l in the string
s. countLetter('abracadabra', 'a') would return 5. When recursing on a string, the base
case is often the empty list, "".
def countLetter(s, l):
if s == "":
return 0
elif s[0] == l:
return 1 + countLetter(s[1:], l)
else:
return countLetter(s[1:], l)reverse(s) - This function reverses a string, s. reverse('yellow') would return
'wolley'.
def reverse(s):
if len(s) <= 1:
return s
else:
return reverse(s[1:]) + s[:1]isPalindrome(s) - This function returns True if the string s is a palindrome (same backwards as
forwards), False otherwise. isPalindrome('racecar') should return True. isPalindrome('palindrome')
should return False.
def isPalindrome(s):
if len(s) <= 1:
return True
else:
return s[0] == s[-1] and isPalindrome(s[1:-1])isSorted(L) - Returns True if the list of ints L is in sorted order. Returns False otherwise.
def isSorted(L):
if len(L) <= 1:
return True
else:
return L[0] < L[1] and isSorted(L[1:])recLinearSearch(x, L) - A recursive version of linear search. Should return True if x is in L,
False otherwise.
def recLinearSearch(x, L):
if len(L) == 0:
return False
else:
if L[0] == x:
return True
else:
return recLinearSearch(x, L[1:])