Presentation is loading. Please wait.

Presentation is loading. Please wait.

Humorous Asides “A journey begins with single step”

Similar presentations


Presentation on theme: "Humorous Asides “A journey begins with single step”"— Presentation transcript:

1

2 Humorous Asides

3 “A journey begins with single step”

4

5

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

7 Smaller is Better

8 CENSORED

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

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

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

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

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

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

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

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

17 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

18 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

19 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 Base case: Solution is obvious

20 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 Recursive Step: Takes 1 step to solution

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

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

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

24 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); } } Trace This, Buddy!

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

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

27 Your Turn  Get into your groups and complete activity

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


Download ppt "Humorous Asides “A journey begins with single step”"

Similar presentations


Ads by Google