recursion continued exercise solution
play

Recursion continued Exercise solution // Returns base ^ exponent. - PowerPoint PPT Presentation

Recursion continued Exercise solution // Returns base ^ exponent. // Precondition: exponent >= 0 public static int pow(int x, int n) { if (n == 0) { // base case; any number to 0th power is 1 return 1; } else { // recursive case: x^n =


  1. Recursion continued

  2. Exercise solution // Returns base ^ exponent. // Precondition: exponent >= 0 public static int pow(int x, int n) { if (n == 0) { // base case; any number to 0th power is 1 return 1; } else { // recursive case: x^n = x * x^(n-1) return x * pow(x, n-1); } }

  3. How recursion works  Each call sets up a new instance of all the parameters and the local variables  When the method completes, control returns to the method that invoked it (which might be another invocation of the same method) pow(4, 3) = 4 * pow(4, 2) = 4 * 4 * pow(4, 1) = 4 * 4 * 4 * pow(4, 0) = 4 * 4 * 4 * 1 = 64 3

  4. Infinite recursion  A method with a missing or badly written base case can causes infinite recursion public static int pow(int x, int y) { return x * pow(x, y - 1); // Oops! Forgot base case } pow(4, 3) = 4 * pow(4, 2) = 4 * 4 * pow(4, 1) = 4 * 4 * 4 * pow(4, 0) = 4 * 4 * 4 * 4 * pow(4, -1) = 4 * 4 * 4 * 4 * 4 * pow(4, -2) = ... crashes: Stack Overflow Error! 4

  5. An optimization  Notice the following mathematical property: 3 12 = (3 2 ) 6 = (9) 6 = (81) 3 = 81*(81) 2  How does this "trick" work?  Do you recognize it?  How can we incorporate this optimization into our pow method?  What is the benefit of this trick?  Go write it.

  6. Exercise solution 2 // Returns base ^ exponent. // Precondition: exponent >= 0 public static int pow(int base, int exponent) { if (exponent == 0) { // base case; any number to 0th power is 1 return 1; } else if (exponent % 2 == 0) { // recursive case 1: x^y = (x^2)^(y/2) return pow(base * base, exponent / 2); } else { // recursive case 2: x^y = x * x^(y-1) return base * pow(base, exponent - 1); } }

  7. Activation records  activation record : memory that Java allocates to store information about each running method  return point ("RP"), argument values, local variable values  Java stacks up the records as methods are called; a method's activation record exists until it returns  Eclipse debug draws the act. records and helps us trace the behavior of a recursive method _ | x = [ 4 ] n = [ 0 ] | pow(4, 0) | RP = [pow(4,1)] | | x = [ 4 ] n = [ 1 ] | pow(4, 1) | RP = [pow(4,2)] | | x = [ 4 ] n = [ 2 ] | pow(4, 2) | RP = [pow(4,3)] | | x = [ 4 ] n = [ 3 ] | pow(4, 3) | RP = [main] | | | main 7

  8. Factorial  What is the formula for the factorial of a number?  How would you write that recursively?  What is the base case?  What is the recursive case?

  9. Dictionary lookup  Suppose you’re looking up a word in the dictionary (paper one, not online!)  You probably won’t scan linearly thru the pages – inefficient.  What would be your strategy?

  10. Binary search binarySearch(dictionary, word){ if (dictionary has one page) { // base case scan the page for word } else { // recursive case open the dictionary to a point near the middle determine which half of the dictionary contains word if (word is in first half of the dictionary) { binarySearch(first half of dictionary, word) } else { binarySearch(second half of dictionary, word) } }

  11. Binary search  Write a method binarySearch that accepts a sorted array of integers and a target integer and returns the index of an occurrence of that value in the array.  If the target value is not found, return -1 index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 value -4 2 7 10 15 20 22 25 30 36 42 50 56 68 85 92 103 int index = binarySearch(data, 42); // 10 int index2 = binarySearch(data, 66); // -1

  12. Fibonacci’s Rabbits  Suppose a newly-born pair of rabbits, one male, one female, are put on an island. A pair of rabbits doesn’t breed until 2 months  old. Thereafter each pair produces another pair  each month Rabbits never die.   How many pairs will there be after n months? image from: http://www.jimloy.com/algebra/fibo.htm 12

  13. Do some cases, see a pattern? m0: 1 young 1 m1: 1 mature 1 m2: 1 mature 1 young 2 m3: 2 mature 1 young 3 m4: 3 mature 2 young 5 m5: 5 mature 3 young 8 m6?

  14. The pattern... m0: 1 young 1 m1: 1 mature 1 m2: 1 mature 1 young 2 m3: 2 mature 1 young 3 m4: 3 mature 2 young 5 m n = m n-1 (rabbits never die) + m n-2 (newborn pairs) How fast does this rabbit population grow?

  15. Fibonacci numbers  The Fibonacci numbers are a sequence of numbers F 0 , F 1 , ... F n defined by: F 0 = F 1 = 1 F i = F i -1 + F i -2 for any i > 1  Write a method that, when given an integer i , computes the nth Fibonacci number.

  16. Fibonacci numbers  recursive Fibonacci was expensive because it made many, many recursive calls  fibonacci(n) recomputed fibonacci(n-1, ... ,1) many times in finding its answer!  this is a common case of "overlapping subproblems ”, where the subtasks handled by the recursion are redundant with each other and get recomputed 16

  17. Fibonacci code  Let's run it for n = 1,2,3,... 10, ... , 20,...  What happens if n = 5, 6, 7, 8, ...  Every time n increments with 2, the call tree more than doubles.. F5 F4 F3 F2 F1 F2 F3 F0 F1 F1 F2 F1 F0 F0 F1

  18. Growth of rabbit population 1 1 2 3 5 8 13 21 34 ... every 2 months the population at least DOUBLES

  19. Recursive Algorithms Example: Tower of Hanoi, move all disks to third peg without ever placing a larger disk on a smaller one. 19

  20. Try to find the pattern by cases  One disk is easy  Two disks...  Three disks...  Four disk...

  21. Recursive Algorithms Example: Tower of Hanoi, move all disks to third peg without ever placing a larger disk on a smaller one. 21

  22. Recursive Algorithms Example: Tower of Hanoi, move all disks to third peg without ever placing a larger disk on a smaller one. 22

  23. Recursive Algorithms Example: Tower of Hanoi, move all disks to third peg without ever placing a larger disk on a smaller one. 23

  24. Recursive Algorithms Example: Tower of Hanoi, move all disks to third peg without ever placing a larger disk on a smaller one. 24

  25. Parade  A parade consists of a set of bands and floats in a single line.  To keep from drowning each other out, bands cannot be placed next to another band  Given the parade is of length n, how many ways can it be organized

  26. Counting ways  Let P(n) = the number of ways the parade can be organized.  Parades can either end in a band or a float  Let F(n) = the number of parades of length n ending in a float  Let B(n) = the number of parades of length n ending in a band  So:  P(n) = F(n) + B(n)

  27. Recursive case  Consider F(n)  Since a float can be placed at next to anything, the number of parades ending in a float is equal to  F(n) = P(n-1)  Consider B(n)  The only way a band can end a parade is if the next to last unit is a float.  B(n) = F(n-1)  By substitution, B(n) = P(n-2)  So:  P(n) = P(n-1) + P(n-2)

  28. Base case  How many parades configs can there be for:  n=1  2 – float or band  How many parade configs can there be for :  n=2  3  Float/float  Band/float  Float/band

  29. Spock’s dilemma  We’ve reached the end of the 5 year mission, just a few days to go  The Enterprise enters a new solar system – which has n planets  Unfortunately, we only have time to visit k of those planets  How many different choices are there?

  30. The algorithm  Let c(n,k) = the number of choices  Let us consider a planet X  C(n,k) = the number of choices that include choosing planet X + the number of choices that do not include planet X

  31. The recurring cases  Including planet X  C(n-1, k-1)  Not including planet X  C(n-1, k)  So:  C(n,k) = C(n-1,k-1) + C(n-1, k)

  32. The base cases  If k=0  We have chosen all the planets we can choose  What’s left is a single case  If k = n  We must choose all the remaining planets  What’s left is a single case  So: If (k == 0) || (k == n) return 1;

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend