Presentation is loading. Please wait.

Presentation is loading. Please wait.

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.

Similar presentations


Presentation on theme: "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."— 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

3

4 Humorous Asides

5 “A journey begins with single step”

6

7

8  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 if s and loops  Move repeated action into small (private) methods Solving Problems

9 Smaller is Better

10 CENSORED

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

12  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 Goal of a Java Method

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

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

15  Recursive stepbase case(s)  Recursive step simplifies problem to base case(s)  Recast using slightly easier version in recursive step 4! = 4 * 3! See Recursion Work

16  Recursive stepbase case(s)  Recursive step simplifies problem to base case(s)  Recast using slightly easier version in recursive step 4! = 4 * 3! = 4 * (3 * 2!) See Recursion Work

17  Recursive stepbase case(s)  Recursive step simplifies problem to base case(s)  Recast using slightly easier version in recursive step 4! = 4 * 3! = 4 * (3 * 2!) = 4 * (3 * (2 * 1!)) See Recursion Work

18  Recursive stepbase case(s)  Recursive step simplifies problem to base case(s)  Recast using slightly easier version in recursive step 4! = 4 * 3! = 4 * (3 * 2!) = 4 * (3 * (2 * 1!))  Base case(s) handle and solve obvious cases = 4 * (3 * (2 * 1)) See Recursion Work

19  Recursive stepbase case(s)  Recursive step simplifies problem to base case(s)  Recast using slightly easier version in recursive step 4! = 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) See Recursion Work

20  Recursive stepbase case(s)  Recursive step simplifies problem to base case(s)  Recast using slightly easier version in recursive step 4! = 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 See Recursion Work

21  Recursive stepbase case(s)  Recursive step simplifies problem to base case(s)  Recast using slightly easier version in recursive step 4! = 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 See Recursion Work

22 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  StackOverflowError thrown by program For Recursion To Work

23 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 one  Get one step closer to base case at each recursive call  Must check if algorithm works for all possible inputs For Recursion To Work

24 recursive  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); } } Recursion in Java

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

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

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

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

29  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 1  Take 1 step toward base case (not 2, 3, or 10482) Recursive Method Basics

30  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 1  Take 1 step toward base case (not 2, 3, or 10482) Recursive Method Basics

31  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) Tracing Recursion

32  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 Tracing Recursion

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

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

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


Download ppt "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."

Similar presentations


Ads by Google