there and back again - wellesley...

27
1 CS111 Computer Programming Department of Computer Science Wellesley College There and back again Buggle recursion Friday, October 5, 2007 Recursion 10-2 Recursion o Recursion solves a problem by solving a smaller instance of the same problem. o Think divide, conquer, and glue when all the subproblems have the same “shape” as the original problem. o A recursive method is a method that invokes itself

Upload: others

Post on 29-Oct-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

1

CS111 Computer Programming

Department of Computer ScienceWellesley College

There and back againBuggle recursion

Friday, October 5, 2007

Recursion 10-2

Recursiono Recursion solves a problem

by solving a smaller instance of the same problem.

o Think divide, conquer, and glue when all thesubproblems have the same “shape” as the original problem.

o A recursive method is a method that invokes itself

Page 2: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

2

Recursion 10-3

bagelForward(3)

Write a method that teaches a buggle to leave behind a trail of bagels of a given length. Assume brushUp().

Recursion 10-4

We could solve …bagelForward(3); bydropBagel();forward(); and solving …

bagelForward(2); bydropBagel();forward(); and solving …

bagelForward(1); bydropBagel();forward(); and solving …

bagelForward(0); byDoing nothing at all

Page 3: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

3

Recursion 10-5

bagelForward(int n)

public void bagelForward(int n) {

if (n == 0) { // base case// do nothing

} else { // recursive casedropBagel();forward();

// Now what?}

}

Recursion 10-6

Putting a wrapper around it

public class BagelWorld extends BuggleWorld {public void run() {

BagelBuggle betty = new BagelBuggle();betty.brushUp();betty.bagelForward(3);

}}class BagelBuggle extends Buggle {

public void bagelForward(int n) {if (n == 0) {

// do nothing} else {

dropBagel();forward();bagelForward(n-1);

}}

}

Page 4: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

4

Recursion 10-7

BagelWorld

BagelBuggle betty = new BagelBuggle();betty.brushUp();betty.bagelForward(3);

ObjectLand

Execution Land .run()

JEM demonstrating bagelForward method

this

BW

BW

BW

Recursion 10-8

BagelWorld

BagelBuggle betty = ;betty.brushUp();betty.bagelForward(3);

ObjectLand

Execution Land .run()

A buggle named betty is constructed

this

BW

BW

BW

betty BB1

color red

brushDown true

BagelBuggle BB1

heading EAST

position (1,1)

BB1

Page 5: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

5

Recursion 10-9

BagelWorld

BagelBuggle betty = ;.brushUp();

betty.bagelForward(3);

ObjectLand

Execution Land .run()

betty raises her brush

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (1,1)

BB1BB1

Recursion 10-10

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

The message bagelForward(3) is sent to betty

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (1,1)

BB1BB1BB1

.bagelForward(3)this

if (n==0) {} else {

dropBagel();forward();bagelForward(n-1);

}

BB1

BB1 n 3

Page 6: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

6

Recursion 10-11

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

The variable n is evaluated

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (1,1)

BB1BB1BB1

.bagelForward(3)this

if (3==0) {} else {

dropBagel();forward();bagelForward(n-1);

}

BB1

BB1 n 3

Recursion 10-12

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

The boolean expression is evaluated: execute the else clause

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (1,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(n-1);

}

BB1

BB1 n 3

Page 7: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

7

Recursion 10-13

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

Drop a bagel and move forward

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (2,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(n-1);

}

BB1

BB1 n 3

Recursion 10-14

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

Evaluate the method’s argument

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (2,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

Page 8: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

8

Recursion 10-15

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

Execute the method bagelForward(2)

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (2,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

.bagelForward(2)this

if (n==0) {} else {

dropBagel();forward();bagelForward(n-1);

}

BB1

BB1 n 2

Recursion 10-16

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

Evaluate the boolean expression and execute the else clause

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (2,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

.bagelForward(2)this

if (false) {} else {

dropBagel();forward();bagelForward(n-1);

}

BB1

BB1 n 2

Page 9: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

9

Recursion 10-17

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

Drop a bagel and move forward

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (3,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

.bagelForward(2)this

if (false) {} else {

dropBagel();forward();bagelForward(n-1);

}

BB1

BB1 n 2

Recursion 10-18

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

Evaluate the method’s argument

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (3,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

.bagelForward(2)this

if (false) {} else {

dropBagel();forward();bagelForward(1);

}

BB1

BB1 n 2

Page 10: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

10

Recursion 10-19

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

Execute the method bagelForward(1)

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (3,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

.bagelForward(2)this

if (false) {} else {

dropBagel();forward();bagelForward(1);

}

BB1

BB1 n 2

.bagelForward(1)this

if (n==0) {} else {

dropBagel();forward();bagelForward(n-1);

}

BB1

BB1 n 1

Recursion 10-20

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

Evaluate the boolean expression and execute the else clause

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (3,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

.bagelForward(2)this

if (false) {} else {

dropBagel();forward();bagelForward(1);

}

BB1

BB1 n 2

.bagelForward(1)this

if (false) {} else {

dropBagel();forward();bagelForward(n-1);

}

BB1

BB1 n 1

Page 11: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

11

Recursion 10-21

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

Drop a bagel and move forward

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (4,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

.bagelForward(2)this

if (false) {} else {

dropBagel();forward();bagelForward(1);

}

BB1

BB1 n 2

.bagelForward(1)this

if (false) {} else {

dropBagel();forward();bagelForward(n-1);

}

BB1

BB1 n 1

Recursion 10-22

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

Evaluate the method’s argument

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (4,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

.bagelForward(2)this

if (false) {} else {

dropBagel();forward();bagelForward(1);

}

BB1

BB1 n 2

.bagelForward(1)this

if (false) {} else {

dropBagel();forward();bagelForward(0);

}

BB1

BB1 n 1

Page 12: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

12

Recursion 10-23

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

Execute the method bagelForward(0)

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (4,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

.bagelForward(2)this

if (false) {} else {

dropBagel();forward();bagelForward(1);

}

BB1

BB1 n 2

.bagelForward(1)this

if (false) {} else {

dropBagel();forward();bagelForward(0);

}

BB1

BB1 n 1

.bagelForward(0)this

if (n==0) {} else {

dropBagel();forward();bagelForward(n-1);

}

BB1

BB1 n 0

Recursion 10-24

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

Evaluate the boolean expression and execute the then clause

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (4,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

.bagelForward(2)this

if (false) {} else {

dropBagel();forward();bagelForward(1);

}

BB1

BB1 n 2

.bagelForward(1)this

if (false) {} else {

dropBagel();forward();bagelForward(0);

}

BB1

BB1 n 1

.bagelForward(0)this

if (true) {} else {

dropBagel();forward();bagelForward(n-1);

}

BB1

BB1 n 0

Page 13: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

13

Recursion 10-25

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

The bagelForward(0) execution frame finishes

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (4,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

.bagelForward(2)this

if (false) {} else {

dropBagel();forward();bagelForward(1);

}

BB1

BB1 n 2

.bagelForward(1)this

if (false) {} else {

dropBagel();forward();bagelForward(0);

}

BB1

BB1 n 1

Recursion 10-26

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

The bagelForward(1) execution frame finishes

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (4,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

.bagelForward(2)this

if (false) {} else {

dropBagel();forward();bagelForward(1);

}

BB1

BB1 n 2

Page 14: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

14

Recursion 10-27

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

The bagelForward(2) execution frame finishes

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (4,1)

BB1BB1BB1

.bagelForward(3)this

if (false) {} else {

dropBagel();forward();bagelForward(2);

}

BB1

BB1 n 3

Recursion 10-28

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelForward(3);

ObjectLand

Execution Land .run()

The bagelForward(3) execution frame finishes

this

BW

BW

BW

betty BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (4,1)

BB1BB1BB1

Page 15: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

15

Recursion 10-29

There and back: bagelLine(3)

Write a method that teaches a buggle to go forward n steps dropping a trail of n bagels behind it and return to the starting position. Assume brushUp().

Recursion 10-30

Roundtrip BagelBuggle

Page 16: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

16

Recursion 10-31

bagelLine(int n)

public void bagelLine(int n) {if (n == 0) {

// do nothing} else {

dropBagel();forward();bagelLine(n-1);

}}

backward();

Recursion 10-32

BagelWorld

BagelBuggle betty = new BagelBuggle();betty.brushUp();betty.bagelLine(3);

ObjectLand

Execution Land .run()

JEM demonstrating bagelLine method

this

BW

BW

BW

Page 17: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

17

Recursion 10-33

BagelWorld

BagelBuggle betty = ;betty.brushUp();betty.bagelLine(3);

ObjectLand

Execution Land .run()

A buggle named betty is constructed

this

BW

BW

BW

betty BB1

BB1

color red

brushDown true

BagelBuggle BB1

heading EAST

position (1,1)

Recursion 10-34

BagelWorld

BagelBuggle betty = ;.brushUp();

betty.bagelLine(3);

ObjectLand

Execution Land .run()

betty raises her brush

this

BW

BW

BW

betty BB1

BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (1,1)

BB1

Page 18: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

18

Recursion 10-35

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelLine(3);

ObjectLand

Execution Land .run()

The message bagelLine(3) is sent to betty

this

BW

BW

BW

betty BB1

BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (1,1)

.bagelLine(3)this

if (n==0) {} else {

dropBagel();forward();bagelLine(n-1);backward(); }

BB1

BB1 n 3

BB1BB1

Recursion 10-36

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelLine(3);

ObjectLand

Execution Land .run()

Evaluate the boolean expression, drop a bagel, move forward, andexecute bagelLine(2)

this

BW

BW

BW

betty BB1

BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (2,1)

.bagelLine(3)this

if (false) {} else {

dropBagel();forward();bagelLine(2);backward(); }

BB1

BB1 n 3

BB1BB1

.bagelLine(2)this

if (n==0) {} else {

dropBagel();forward();bagelLine(n-1);backward(); }

BB1

BB1 n 2

Page 19: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

19

Recursion 10-37

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelLine(3);

ObjectLand

Execution Land .run()

Evaluate the boolean expression, drop a bagel, move forward, andexecute bagelLine(1)

this

BW

BW

BW

betty BB1

BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (3,1)

.bagelLine(3)this

if (false) {} else {

dropBagel();forward();bagelLine(2);backward(); }

BB1

BB1 n 3

BB1BB1

.bagelLine(2)this

if (false) {} else {

dropBagel();forward();bagelLine(1);backward(); }

BB1

BB1 n 2

.bagelLine(1)this

if (n==0) {} else {

dropBagel();forward();bagelLine(n-1);backward(); }

BB1

BB1 n 1

Recursion 10-38

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelLine(3);

ObjectLand

Execution Land .run()

Evaluate the boolean expression, drop a bagel, move forward, andexecute bagelLine(0)

this

BW

BW

BW

betty BB1

BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (4,1)

.bagelLine(3)this

if (false) {} else {

dropBagel();forward();bagelLine(2);backward(); }

BB1

BB1 n 3

BB1BB1

.bagelLine(2)this

if (false) {} else {

dropBagel();forward();bagelLine(1);backward(); }

BB1

BB1 n 2

.bagelLine(1)this

if (false) {} else {

dropBagel();forward();bagelLine(0);backward(); }

BB1

BB1 n 1

.bagelLine(0)this

if (n==0) {} else {

dropBagel();forward();bagelLine(n-1);backward(); }

BB1

BB1 n 0

Page 20: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

20

Recursion 10-39

if (true) {} else {

dropBagel();forward();bagelLine(n-1);backward(); }

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelLine(3);

ObjectLand

Execution Land .run()

Evaluate the boolean expression and execute the then clause

this

BW

BW

BW

betty BB1

BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (4,1)

.bagelLine(3)this

if (false) {} else {

dropBagel();forward();bagelLine(2);backward(); }

BB1

BB1 n 3

BB1BB1

.bagelLine(2)this

if (false) {} else {

dropBagel();forward();bagelLine(1);backward(); }

BB1

BB1 n 2

.bagelLine(1)this

if (false) {} else {

dropBagel();forward();bagelLine(0);backward(); }

BB1

BB1 n 1

.bagelLine(0)this

BB1

BB1 n 0

Recursion 10-40

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelLine(3);

ObjectLand

Execution Land .run()

The bagelLine(0) execution frame finishes

this

BW

BW

BW

betty BB1

BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (4,1)

.bagelLine(3)this

if (false) {} else {

dropBagel();forward();bagelLine(2);backward(); }

BB1

BB1 n 3

BB1BB1

.bagelLine(2)this

if (false) {} else {

dropBagel();forward();bagelLine(1);backward(); }

BB1

BB1 n 2

.bagelLine(1)this

if (false) {} else {

dropBagel();forward();bagelLine(0);backward(); }

BB1

BB1 n 1

Page 21: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

21

Recursion 10-41

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelLine(3);

ObjectLand

Execution Land .run()

Step backward

this

BW

BW

BW

betty BB1

BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (3,1)

.bagelLine(3)this

if (false) {} else {

dropBagel();forward();bagelLine(2);backward(); }

BB1

BB1 n 3

BB1BB1

.bagelLine(2)this

if (false) {} else {

dropBagel();forward();bagelLine(1);backward(); }

BB1

BB1 n 2

.bagelLine(1)this

if (false) {} else {

dropBagel();forward();bagelLine(0);backward(); }

BB1

BB1 n 1

Recursion 10-42

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelLine(3);

ObjectLand

Execution Land .run()

The bagelLine(1) execution frame finishes

this

BW

BW

BW

betty BB1

BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (3,1)

.bagelLine(3)this

if (false) {} else {

dropBagel();forward();bagelLine(2);backward(); }

BB1

BB1 n 3

BB1BB1

.bagelLine(2)this

if (false) {} else {

dropBagel();forward();bagelLine(1);backward(); }

BB1

BB1 n 2

Page 22: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

22

Recursion 10-43

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelLine(3);

ObjectLand

Execution Land .run()

Step backward

this

BW

BW

BW

betty BB1

BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (2,1)

.bagelLine(3)this

if (false) {} else {

dropBagel();forward();bagelLine(2);backward(); }

BB1

BB1 n 3

BB1BB1

.bagelLine(2)this

if (false) {} else {

dropBagel();forward();bagelLine(1);backward(); }

BB1

BB1 n 2

Recursion 10-44

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelLine(3);

ObjectLand

Execution Land .run()

The bagelLine(2) execution frame finishes

this

BW

BW

BW

betty BB1

BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (2,1)

.bagelLine(3)this

if (false) {} else {

dropBagel();forward();bagelLine(2);backward(); }

BB1

BB1 n 3

BB1BB1

Page 23: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

23

Recursion 10-45

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelLine(3);

ObjectLand

Execution Land .run()

Step backward

this

BW

BW

BW

betty BB1

BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (1,1)

.bagelLine(3)this

if (false) {} else {

dropBagel();forward();bagelLine(2);backward(); }

BB1

BB1 n 3

BB1BB1

Recursion 10-46

BagelWorld

BagelBuggle betty = ;.brushUp();.bagelLine(3);

ObjectLand

Execution Land .run()

The bagelLine(3) execution frame finishes

this

BW

BW

BW

betty BB1

BB1

color red

brushDown false

BagelBuggle BB1

heading EAST

position (1,1)

BB1BB1

Page 24: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

24

Recursion 10-47

bagelsToWall();

Write a method that teaches a buggle to drop a line of bagels from the buggle’s current position all the way up to the wall. Assume brushUp().

Recursion 10-48

bagelsToWall();

public void bagelsToWall() {

if (isFacingWall()) {dropBagel();

} else {

}}

dropBagel();forward();bagelsToWall();

Page 25: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

25

Recursion 10-49

bagelsToWallAndBack();

Write a method that teaches a buggle to leave behind a trail of bagels all the way to the wall, and returns to the starting position. Assume brushUp().

Recursion 10-50

bagelsToWallAndBack();

public void bagelsToWallAndBack() {

if (isFacingWall()) {dropBagel();

} else {

}}

dropBagel();forward();bagelsToWallAndBack();backward();

Page 26: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

26

Recursion 10-51

Alternatively

public void bagelsToWallAndBack() {

if (isFacingWall()) {dropBagel();

} else {

}}

forward();bagelsToWallAndBack();backward();dropBagel();

Recursion 10-52

Bagel RectangleWrite a method that enables a buggle to draw a rectangle of bagels of width, w, and height, h, and return to the starting position*. Assume brushUp().

*How many parameters would such a method take?

Page 27: There and back again - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/10_buggle_recursion.pdf · There and back again Buggle recursion Friday, October 5, 2007 Recursion

27

Recursion 10-53

bagelRect(int w, int h);public void bagelRect(int w, int h) {

if (h == 0) {// nothing to do

} else {

}}

bagelLine(w);

left(); // move to next rowforward();right();

bagelRect(w, h-1); // draw subrectangle

left(); // undo state changesbackward();right();