question of the day
DESCRIPTION
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?. Question of the Day. - PowerPoint PPT PresentationTRANSCRIPT
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?
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?
Everybody on the boat was married.
LECTURE 18:RECURSION
Humorous Asides
“A journey begins with single step”
“A journey begins with single step”
“A journey begins with single step”
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
Solving Problems
Smaller is Better
Smaller is Better
CENSORED
Smaller is Better (At least for programming)
CENSORED
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
re-cur-sion: Method of solving problem by combining solutions to identical, smaller problems
Recursion
re-cur-sion: Method of solving problem by combining solutions to identical, smaller problems
Recursion
Recursive step simplifies problem to base case(s) Recast using slightly easier version in
recursive step4! = 4 * 3!
See Recursion Work
Recursive step simplifies problem to base case(s) Recast using slightly easier version in
recursive step4! = 4 * 3! = 4 * (3 * 2!)
See Recursion Work
Recursive step simplifies problem to base case(s) Recast using slightly easier version in
recursive step4! = 4 * 3! = 4 * (3 * 2!) = 4 * (3 * (2 * 1!))
See Recursion Work
Recursive step simplifies 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))
See Recursion Work
Recursive step simplifies 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)
See Recursion Work
Recursive step simplifies 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
See Recursion Work
Recursive step simplifies 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
See Recursion 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 StackOverflowError thrown by program
For Recursion To Work
Very easy to create solution that does not workRecursive 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
For Recursion To Work
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
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
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: • Take 1 step to solution
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: • Take 1 step to solution• Make 1 or more recursive calls
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: • Take 1 step to solution• Make 1 or more recursive calls• Simple process computes result
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)
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)
Recursive Method Basics
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
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
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!
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!
Your Turn
Get into your groups and complete activity
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