# lec12.py # Lillian Lee (LJL2) # Feb 27, 2013 """Demo recursive functions.""" import random def num_es2(s): """Returns: number of 'e's in string s. This implementation uses a random 'split point' to make two recursive calls on two smaller substrings. """ if len(s) <= 1: # {base case: can't break into two smaller strings} return (1 if s == 'e' else 0) # {len(s) > 1}. Must be careful to choose a 'split point' that makes # progress towards the base case: two smaller substrings i = random.randrange(1,len(s)) # {i in 1..len(s)-1}, so s[:i] != '' return num_es2(s[:i]) + num_es2(s[i:]) def ispalindrome(s): if len(s) < 2: return True # at least two characters return s[0] == s[-1] and ispalindrome(s[1:-1]) def reverse(s): """Returns: reverse of string s""" # base case if s == '': return s # idea: reverse of string is reverse(s[1:]) + s[0] return reverse(s[1:]) + s[0] def reverse2(s): """Returns: reverse of string s""" # alternate implementation if len(s) <= 1: return s return s[-1] + reverse(s[:-1])