107 Views

Download Presentation
## What gets printed out?

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -

**What gets printed out?**def f(n): if (n == 0): return (" ") else: print(“blug ") return f(n-1) f(3)**What about?**deff(x): if (x == 0): return x else: return(x + f(x-1)) print(f(4)) deff2(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 definitionis 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 f3(x): if (x == 1): return x else: return(x + f3(x-2)) print(f3(4)) 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))**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: • Must formulate a problem in terms of itself. (the function must call itself) • Must include a condition for stopping the recursion (base case) • Must make sure that we will always hit that stopping condition.**Stacking up Functions**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" def f(x): if (x == 0): return x else: return(x + f(x-1)) print(f(4)) deff2(x): if (x == 1): return (str(x)) else: return(str(x) + f2( x-1)) print(f2(4))**Recursion: Try**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)) 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))**(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))**defnums(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:**• Write a recursive function that prints out every other number starting at 1 and ending at 10 • Write a recursive function that counts the number of numbers that is evenly divisible by 3 between x and y • Write a recursive function that calculates x to the yth power, assuming we’ve only got multiplication (i.e., you can’t use **) • 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 defg(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 defh(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 **) defk(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) 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)) 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))