1 / 36

Question of the Day

Question of the Day. While walking across a bridge I saw a boat filled with people . Nobody boarded or left the boat, but on board the boat there was not a single person . How is this possible?. Question of the Day.

ursula
Télécharger la présentation

Question of the Day

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Question of the Day While walking across a bridge I saw a boat filled with people. Nobody boarded or left the boat, but on board the boat there was not a single person. How is this possible?

  2. Question of the Day While walking across a bridge I saw a boat filled with people. Nobody boarded or left the boat, but on board the boat there was not a singleperson. How is this possible? Everybody on the boat was married.

  3. Lecture 18:Recursion

  4. Humorous Asides

  5. “A journey begins with single step”

  6. “A journey begins with single step”

  7. “A journey begins with single step”

  8. Solving Problems • Large problems hard to solve • Thinking about & solving small problems easier • Splitting problems into smaller ones often helps • Before you start coding, plan each assignment • Break up large methods with many ifs and loops • Move repeated action into small (private) methods

  9. Smaller is Better

  10. Smaller is Better CENSORED

  11. Smaller is Better CENSORED (At least for programming)

  12. Goal of a Java Method • Should be boring, easy, understandable drone • Given its parameters, perform the expected action • Only perform action defined for its parameters • Should not cure cancer • Do not worry about the larger problem • Solving entire problem is not this method’s issue • Split into tasks since solving whole problem hard

  13. Recursion re-cur-sion:Method of solving problem by combining solutions to identical, smaller problems

  14. Recursion re-cur-sion:Method of solving problem by combining solutions to identical, smaller problems

  15. See Recursion Work • Recursive stepsimplifies problem to base case(s) • Recast using slightly easier version in recursive step4! = 4 *3!

  16. See Recursion Work • Recursive stepsimplifies problem to base case(s) • Recast using slightly easier version in recursive step4! = 4 *3! = 4 *(3 * 2!)

  17. See Recursion Work • Recursive stepsimplifies problem to base case(s) • Recast using slightly easier version in recursive step4! = 4 *3! = 4 *(3 * 2!) = 4 * (3 * (2 * 1!))

  18. See Recursion Work • Recursive stepsimplifies problem to base case(s) • Recast using slightly easier version in recursive step4! = 4 *3! = 4 *(3 * 2!) = 4 * (3 * (2 * 1!)) • Base case(s) handle and solve obvious cases = 4 * (3 * (2 * 1))

  19. See Recursion Work • Recursive stepsimplifies problem to base case(s) • Recast using slightly easier version in recursive step4! = 4 *3! = 4 *(3 * 2!) = 4 * (3 * (2 * 1!)) • Base case(s) handle and solve obvious cases = 4 * (3 * (2 * 1)) • After base case,combine solutions in recursive steps = 4 * (3 * 2)

  20. See Recursion Work • Recursive stepsimplifies problem to base case(s) • Recast using slightly easier version in recursive step4! = 4 *3! = 4 *(3 * 2!) = 4 * (3 * (2 * 1!)) • Base case(s) handle and solve obvious cases = 4 * (3 * (2 * 1)) • After base case,combine solutions in recursive steps = 4 * (3 * 2) = 4 * 6

  21. See Recursion Work • Recursive stepsimplifies problem to base case(s) • Recast using slightly easier version in recursive step4! = 4 *3! = 4 *(3 * 2!) = 4 * (3 * (2 * 1!)) • Base case(s) handle and solve obvious cases = 4 * (3 * (2 * 1)) • After base case,combine solutions in recursive steps = 4 * (3 * 2) = 4 * 6 = 24

  22. For Recursion To Work • Very easy to create solution that does not work • Infinite recursion occurs if base case never reached • Frame-by-frame stack grows from method calls • StackOverflowErrorthrown by program

  23. For Recursion To Work • Very easy to create solution that does not work • Recursive step must advance toward a base case • If there are multiple, which base case is unimportant • Get one step closer to base case at each recursive call • Must check if algorithm works for all possible inputs

  24. Recursion in Java • A method is recursive if it calls itself: public static int factorial(int i) { if (i <= 1) { return 1; } else {return i * factorial(i - 1); } }

  25. Recursion in Java Base case: Solution is simple • A method is recursive if it calls itself: public static intfactorial(inti) { if (i <= 1) { return 1; } else {intnextI = i – 1;int result = factorial(nextI); return i * result; } }

  26. Recursion in Java • Recursive Step: • Take 1 step to solution • A method is recursive if it calls itself: public static intfactorial(inti) { if (i <= 1) { return 1; } else {intnextI = i – 1;int result = factorial(nextI); return i * result; } }

  27. Recursion in Java • Recursive Step: • Take 1 step to solution • Make 1 or more recursive calls • A method is recursive if it calls itself: public static intfactorial(inti) { if (i <= 1) { return 1; } else {intnextI = i – 1;int result = factorial(nextI);return i * result; } }

  28. Recursion in Java • Recursive Step: • Take 1 step to solution • Make 1 or more recursive calls • Simple process computes result • A method is recursive if it calls itself: public static intfactorial(inti) { if (i <= 1) { return 1; } else {intnextI = i – 1;int result = factorial(nextI);return i * result; } }

  29. Recursive Method Basics • Start with check for base case(s) • These cases must return blatantly obvious answer • 1+ recursive calls found within recursive step(s) • Write these assuming recursive call works • Take 1 step toward base case (not 2, 3, or 10482)

  30. Recursive Method Basics • Start with check for base case(s) • These cases must return blatantly obvious answer • 1+ recursive calls found within recursive step(s) • Write these assuming recursive call works • Take 1 step toward base case (not 2, 3, or 10482)

  31. Tracing Recursion • No different than usual tracing we were doing • When method called, we add frame for the call • Local variables & parameters shown in frame • (Processors also include line being executed)

  32. Tracing Recursion • No different than usual tracing we were doing • When method called, we add frame for the call • Local variables & parameters shown in frame • (Processors also include line being executed) NOT

  33. Trace This, Buddy! static intfindMin(int[] a, int j) {if (j == a.length - 1) { return a[j];} else {intminFollowing = findMin(a, j+1); return Math.min(a[j], minFollowing);} } int[] example1 = { 0 }; findMin(example1, 0);

  34. Trace This, Buddy! static intfindMin(int[] a, int j) {if (j == a.length - 1) { return a[j];} else {intminFollowing = findMin(a, j+1); return Math.min(a[j], minFollowing);} } int[] example2 = { 2, 3, 0, 1 }; findMin(example2, 0);

  35. Your Turn • Get into your groups and complete activity

  36. For Next Lecture • Re-read GT3.5 for Friday • How do you write a recursive method? • Can recursion involve 2 (or more) methods? • How do you write a recursive method? • Week #7 weekly assignment available now • Angel also has programming assignment #1 • Pulls everything together and shows off your stuff

More Related