Download presentation
Presentation is loading. Please wait.
Published byEaster Sanders Modified over 9 years ago
2
Humorous Asides
3
“A journey begins with single step”
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.