Download
question of the day n.
Skip this Video
Loading SlideShow in 5 Seconds..
Question of the Day PowerPoint Presentation
Download Presentation
Question of the Day

Question of the Day

107 Views Download Presentation
Download Presentation

Question of the Day

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