what gets printed out? def f(n): if (n == 0): return (" ") else: print(“blug ")...

Post on 13-Dec-2015

214 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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”)

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

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

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.

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"

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

(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))

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?

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).

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)

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

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

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

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

top related