What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

17

Transcript of What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

Page 1: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)
Page 2: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

What gets printed out?def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1)f(3)

Page 3: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

What about?def f(x): if (x == 0): return x else: return(x + f(x-1))

print(f(4))

def f2(x): if (x == 1): return (str(x)) else: return(str(x) + f2(x-1))

print(f2(4))

Page 4: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

Recursion Recursion is when a function is defined in terms of itself (it

calls itself). Def: A recursive definition is one that defines something in

terms of itself (that is, recursively)

Recursion is, in essence, making a function happen again and again without our having to call it (convenient, huh?)

#This is recursion

def recurse():

recurse()

return(recurse())

#This isn’t

def nonrecurse():

return(“nope”)

Page 5: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

Try:def f(x):

return(x + f(x-1))

print(f(4))

def f2(x): if (x == 1): return x else: return(x + f2(x+1))

print(f2(4))

def f3(x): if (x == 1): return x else: return(x + f3(x-2))

print(f3(4))

Page 6: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

How about:def f(x): if x == 100: return(“none") else: if (x**2 - 3 *x - 4) == 0: print(str(x) + " solves the equation ")

return(f(x+1))

print(f(-100))

Page 7: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

Recursion Essentials

We now have the basics:1. Must formulate a problem in terms of

itself. (the function must call itself)

2. Must include a condition for stopping the recursion (base case)

3. Must make sure that we will always hit that stopping condition.

Page 8: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

Stacking up Functionsdef f(x): if (x == 0): return x else: return(x + f(x-1))

print(f(4))

def f2(x): if (x == 1): return (str(x)) else: return(str(x) + f2( x-1))

print(f2(4))

Stack in memory

f(4) = 4 + f(3)?

f(3) = 3 + f(2)?

f(2) = 2 + f(1)?

f(1) = 1 + f(0)?

f(0) = 0__________________________

f2(4) = “4” + f2(3)

f2(3) =“3” + f2(2)

f2(2) = “2” + f2(1)

f2(1) = "1"

Page 9: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

Recursion: Try

def f5 (a):

if (a <= 0):

return(1)

elif ((a%2) ==0):

return (f5(a - 1))

else:

return (a*f5(a-1))

print(f5(6))

print(f5(5))

print(f5(-1))

def f6(x):

if (x <= 1):

return str(x)

else:

return(f6(x-1) + str(x) )

print(f6(5))

def f7(a,b): if (b <= 0): return(a) elif((b%3)== 0): return(f7(a+1,b-1)) else: return(f7(a,b-1))print(f7(0,13))

Page 10: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

(Cool, but challenging)

def f4 (a, b):

if (b == 0):

return (a)

if (a < b):

return f4 (b, a)

else:

return f4 (b, a%b)

print(f4(27,12))

print(f4(25,50))

print(f4(15,20))

Page 11: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

def nums(x,y,z):

if y == 1:

return z + x

else:

return(nums(x%y, y//10, z+x//y))

print(nums(1354,1000,0))

print(nums(254,100,0))

What did we just do?

Page 12: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

Writing a recursive function:

Write the base case (the stopping case) first!

There can be more than one stopping condition

Figure out how you’re going to get to the base case

(e.g., write it as if it only needs to happen twice, once without the base case and once with, making sure the second case gets you to the first case).

Page 13: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

Let’s try this:

1. Write a recursive function that prints out every other number starting at 1 and ending at 10

2. Write a recursive function that counts the number of numbers that is evenly divisible by 3 between x and y

3. Write a recursive function that calculates x to the yth power, assuming we’ve only got multiplication (i.e., you can’t use **)

4. Write a recursive function that determines whether a number is prime or not (and returns True if it is, and False if it isn’t)

Page 14: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

Problem 1:Write a recursive function that prints out every other number starting at 1 and ending at 10

def g(x):

if x == 10:

returnstr(x))

elif x > 10:

return()

else:

return(str(x) + g(x+2))

print(g(1))

Page 15: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

Problem 2: Write a recursive function that sums every even number between 1 and 15

def h(x):

if x > 15:

return(0)

elif x%2 == 0:

return (x + h(x + 1))

else:

return(h(x+1))

print(h(1))

Page 16: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

Problem 3: Write a recursive function that finds x to the yth power, assuming we’ve only got multiplication (i.e., you can’t use **)

def k(x,y):

if y == 0:

return(1)

else:

return(x * k(x,y-1))

print(k(3,4))

print(k(2,4))

Page 17: What gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)

Write a recursive function that determines whether a number is prime or not (and returns True if it is, and False if it isn’t)def f(x,y):

if (y>(x//2)):

return(True)

elif (x%y==0):

print(y)

return(False)

else:

return (f(x,y+1))

print(f(6,2))

print(f(137,2))

print(f(55,2))

print(f(29,2))

def f(x,y):

if (y>(x//2)):

return(True)

else:

return (x%y!=0 and f(x,y+1))

print(f(6,2))

print(f(137,2))

print(f(55,2))

print(f(29,2))