fall 2008acs-1805 ron mcfadyen1 ch 8 recursion recursion occurs when a method (or function) calls...

21
Fall 2008 ACS-1805 Ron McFadyen 1 Ch 8 Recursion Recursion occurs when a method (or function) calls itself

Post on 21-Dec-2015

221 views

Category:

Documents


1 download

TRANSCRIPT

Fall 2008 ACS-1805 Ron McFadyen 1

Ch 8 Recursion

Recursion occurs when a method (or function) calls itself

Fall 2008 ACS-1805 Ron McFadyen 2

Indefinite Repetition

• In programs where a count of repetitions is not known (indefinite), we can use one of two repetition control mechanisms:• Recursion • While statement

• Many of the pieces we use to create a program are identified by using special words. For example,• Do in order• Do together• If/Else • Loop

• Recursion is not a program statement with a special word that identifies it as part of the programming language.

Recursion means that a method (or a function) calls itself.

Fall 2008 ACS-1805 Ron McFadyen 3

Examples of recursion

The natural numbers:

1 is in {N} if n is in {N}, then n + 1 is in {N}

Fall 2008 ACS-1805 Ron McFadyen 4

Ancestors

For example, the following is a recursive definition of a person's ancestors:

* One's parents are one's ancestors; * The parents of any ancestor are also ancestors of the person

under consideration (recursion step).

Fall 2008 ACS-1805 Ron McFadyen 5

Fibonacci number sequence

Fibonacci number sequence:

F(n) = F(n − 1) + F(n − 2).

Base cases:

F(0) = 0

F(1) = 1.

Fall 2008 ACS-1805 Ron McFadyen 6

Factorials

Factorials

n! = n (n - 1)!

3!=3*2! 4!=4*3!2!=2*1!

Base cases:0! = 11! = 1

Fall 2008 ACS-1805 Ron McFadyen 7

Humour

Recursive humor

A common geeky joke is the following "definition" of recursion.

recursion see “recursion”

In the index of a book, on page 189

recursion 22, 45, 80, 189

Fall 2008 ACS-1805 Ron McFadyen 8

Example – shark/goldfish again

Previously we had a loop which executed until the shark was close enough to the goldfish that it could eat it.Consider :

CHASER

If the distance between the shark and the goldfish > 0.5

Do together

shark swims toward goldfish

goldfish flees

call CHASER

Shark eats

Shark swims …

Goldfish flees …

Shark eats …

chaseRecursion.a2w

Recursive call

Fall 2008 ACS-1805 Ron McFadyen 9

This is an example of tail recursion. In tail recursion the last statement in the recursive method is the recursive call.The method begins with an if statement to determine if a base condition is met. If the base condition is met the method terminates; if it is not then we invoke the method again on a smaller problem.

The general form of the algorithm we have just used is:

MethodX:if base condition is satisfied exitelse

do somethingcall MethodX

Example – shark/goldfish again

Fall 2008 ACS-1805 Ron McFadyen 10

tail recursion:

To formulate a solution this way we need: •To understand some base conditions where the problem has a known answer or solution•To be able to express a solution in terms of smaller problems. As the problems get smaller and smaller, we eventually converge to one of the base conditions.

Example – shark/goldfish again

Fall 2008 ACS-1805 Ron McFadyen 11

Shark/goldfish chase:

The problem is contrived so the shark is gaining on the goldfish and so we know the “problem” is getting smaller with each swim action (the gap between the two is getting smaller).

We have decided that the chase ends when the gap between the two is less than 0.5 metres. This is the base condition … when it is true we stop, the method does not call itself again.

Example – shark/goldfish again

Fall 2008 ACS-1805 Ron McFadyen 12

Example – horse race

A carnival style horse race.

In repeated moves, one horse is randomly selected to move forward. The selected horse “runs” straight ahead towards the finish line.

Each time we select a horse that horse moves closer to the finish.

A horse is the winner if it gets to the finish line before any other horse. When one horse wins, the game ends.

We know the race will end. The unknown is which horse gets to the finish first.

Fall 2008 ACS-1805 Ron McFadyen 13

Storyboard

race

if one of the horses has won the winner says, “I won!!!” else randomly choose one horse and move it forward a small amount race again

When this is true, the method ends

Each time we move a little closer to an ending situation

Recursive call to do this all again

A couple of solutions:First:HorseRaceV1.a2wSecond :HorseRaceV2.a2w

Fall 2008 ACS-1805 Ron McFadyen 14

More general forms of recursion

Suppose there is something to do both before and after the recursive call:

if a base condition is satisfied the method teminates

else

do something A

recursive call

do something B

Fall 2008 ACS-1805 Ron McFadyen 15

More general forms of recursion

Suppose there is more than one recursive call:

if a base condition is satisfied the method teminates

else

recursive call

do something

recursive call

See mischief.a2w

Fall 2008 ACS-1805 Ron McFadyen 16

A Towers Problem

• The challenge is to move all the disks from the source cone to the target cone.• Move 1 disk at a time• A larger disk may never be on

top of a smaller disk

Source Spare Target

(coneFrom) (coneSpare) (coneTo)

Run the solution to observe the process: towers.a2w

Fall 2008 ACS-1805 Ron McFadyen 17

Initial world

• The disks are instances of the Torus class. (A torus is a doughnut shaped object.)

• Each cone is positioned exactly 1 meter from its nearest neighbor.

• Other than the bottom disk, each disk is positioned exactly 0.1 meter above the disk below.

Fall 2008 ACS-1805 Ron McFadyen 18

Identifying the disks

• To make it easier to describe our solution, we give each disk an id number and a name.

id number name

1 disk1

2 disk2

3 disk3

4 disk4

Fall 2008 ACS-1805 Ron McFadyen 19

Solving the problem

• Our solution will use the

• Principle of “wishful thinking”

• assume we could solve a smaller version of the same problem

• if we could solve the smaller version, it would make it easier to solve this problem.

• Base case – the simplest possible version of this problem, one that can obviously be solved.

Fall 2008 ACS-1805 Ron McFadyen 20

Wishful thinking in practice

Assume I could move 3 of the disks to the spare cone.

Then I could move the 4th disk (base case) to the target cone.

Fall 2008 ACS-1805 Ron McFadyen 21

Storyboard

• To solve the towers problem, we need to know how many disks we have and which cone is the source, the target, and the spare:

towers

Parameters: howmany, source, target, spare

If howmany is equal to 1 move it (the smallest disk) from the source to the target

Else Do in order call towers to move howmany-1 disks from source to spare (using target as spare)

move it (disk # howmany) from the source to the target call towers to move howmany-1 disks from the spare to the target (using the source as the spare)

base case – move 1 disk

a smaller problem -- recursively move the rest of the disks

Two recursive calls are used in this method.