Top Banner
LECTURE 18: RECURSION
28
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Humorous Asides “A journey begins with single step”

LECTURE 18:RECURSION

Page 2: Humorous Asides “A journey begins with single step”

Humorous Asides

Page 3: Humorous Asides “A journey begins with single step”

“A journey begins with single step”

Page 4: Humorous Asides “A journey begins with single step”

“A journey begins with single step”

Page 5: Humorous Asides “A journey begins with single step”

“A journey begins with single step”

Page 6: Humorous Asides “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

Page 7: Humorous Asides “A journey begins with single step”

Smaller is Better

Page 8: Humorous Asides “A journey begins with single step”

Smaller is Better

CENSORED

Page 9: Humorous Asides “A journey begins with single step”

Smaller is Better (At least for programming)

CENSORED

Page 10: Humorous Asides “A journey begins with single step”

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

Page 11: Humorous Asides “A journey begins with single step”

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

Recursion

Page 12: Humorous Asides “A journey begins with single step”

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

Recursion

Page 13: Humorous Asides “A journey begins with single step”

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

Page 14: Humorous Asides “A journey begins with single step”

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

Page 15: Humorous Asides “A journey begins with single step”

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

Page 16: Humorous Asides “A journey begins with single step”

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

Page 17: Humorous Asides “A journey begins with single step”

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

Page 18: Humorous Asides “A journey begins with single step”

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

Page 19: Humorous Asides “A journey begins with single step”

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

Page 20: Humorous Asides “A journey begins with single step”

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

Page 21: Humorous Asides “A journey begins with single step”

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

Page 22: Humorous Asides “A journey begins with single step”

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

Page 23: Humorous Asides “A journey begins with single step”

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

Page 24: Humorous Asides “A journey begins with single step”

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!

Page 25: Humorous Asides “A journey begins with single step”

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!

Page 26: Humorous Asides “A journey begins with single step”

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!

Page 27: Humorous Asides “A journey begins with single step”

Your Turn

Get into your groups and complete activity

Page 28: Humorous Asides “A journey begins with single step”

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