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