Recursion - PowerPoint PPT Presentation

1 / 15
About This Presentation
Title:

Recursion

Description:

accomplished by a method invoking itself! so, if it invokes itself - then ... invoke ourself to finish the smaller (yet related) problem - this becomes our ... – PowerPoint PPT presentation

Number of Views:59
Avg rating:3.0/5.0
Slides: 16
Provided by: dav5397
Category:

less

Transcript and Presenter's Notes

Title: Recursion


1
Recursion
  • similar to iteration in that you repeatedly do a
    little bit of the task and then loop again and
    work on a smaller piece - eventually reaching
    your goal
  • accomplished by a method invoking itself!
  • so, if it invokes itself - then lets think about
    that - how do you think its going to stop???

2
Recursion
  • Iteration
  • public void pickAll()
  • while (nextToABeeper())
  • pickBeeper()

Recursion public void pickAll() if (!
nextToABeeper() return pickBeeper()
pickAll()
This recursive definition goes like this Are
there any beepers left on this corner? No - then
were done. Yes - then pick one beeper and then
pickAll.
3
Recursion
  • The key to recursion
  • we dont define a problem in terms of exactly
    itself - we define the problem in terms of a
    smaller/simpler (yet very closely related)
    problem - also, we define the simplest/smallest
    situation separately.
  • in the previous problem we define the simplest
    situation to be there are no beepers on the
    corner - this becomes our base case
  • otherwise, we have more work to do - so we solve
    a tiny part of the problem (pickBeeper) and then
    invoke ourself to finish the smaller (yet
    related) problem - this becomes our
    general/recursive case.

4
You Try!
  • write a recursive method called goToSouthWall
  • precondition bot is already facing south - there
    are no walls in the way
  • postcondition bot is at the south wall still
    facing south - it is still on the same avenue
  • What are preconditions postconditions?

the things that need to be true in order for the
method to perform its task - the contract between
the client and the method
what will be true after the method has finished
executing - only guaranteed if the preconditions
are met
5
Writing Recursive Methods - the Process
  • The process for writing recursive robot
    instructions is very similar to that for writing
    loops
  • Step 1 Consider the stopping condition (also
    called the base case)--what is the simplest case
    of the problem that can be solved? In the pickAll
    problem, the simplest, or base, case is when the
    robot is already on an empty corner.

6
the Process - contd
  • Step 2 What does the robot have to do in the
    base case? In this example there's nothing to do.
  • Step 3 Find a way to solve a small piece of the
    larger problem if not in the base case. This is
    called "reducing the problem in the general
    case." In the pickAll problem, the general case
    is when the robot is on a corner with one or more
    beepers and the reduction is to pick up a beeper.

7
the Process - contd
  • Step 4 Make sure the reduction leads to the base
    case. Again, in the above example of pickAll, by
    picking up one beeper at a time, the robot must
    eventually clear the corner of beepers,
    regardless of the original number present.

8
Iteration vs. Recursion
  • An iterative loop must complete each iteration
    before beginning the next one.
  • A recursive method typically begins a new
    instance before completing the current one. When
    that happens, the current instance is temporarily
    suspended, pending the completion of the new
    instance. Of course, this new instance might not
    complete before generating another one. Each
    successive instance must be completed in turn,
    last to first.

9
Iteration vs. Recursion
  • Since EACH recursive instance is supposed to make
    some (often minimal) progress toward the base
    case, we should not use loops to control
    recursive calls. Thus, we will usually see an IF
    or an IF/ELSE in the body of a recursive method,
    but not a WHILE.

10
Follow the steps and write the method
  • Use recursion to move a robot named Karel to a
    beeper. Follow the steps presented earlier
  • Step 1 What is the base case?
  • Karel is on the beeper.
  • Step 2 What does the robot do in the base case?
  • Nothing.
  • Step 3 What is the general case?
  • The robot is not on the beeper.

11
writing the recursive method - contd
  • Step 4 What is the reduction (what do we do in
    the general case)?
  • Move toward the beeper and make the recursive
    call.
  • Does the reduction lead to termination? Yes,
    assuming the beeper is directly in front of the
    robot, the distance will get shorter by one block
    for each recursive call. By the way, this
    assumption becomes the precondition(i.e., there
    is a beeper somewhere in front of the bot).

12
Why Recursion?
  • there are problems which are much easier to solve
    using recursion
  • Problem the Lost Beeper Mine
  • Karel is facing East and there is a beeper
    somewhere in front of her. Directly North of that
    beeper there is a Beeper Mine (a corner with a
    large number of beepers on it). The Beeper Mine
    is exactly the same number of corners North of
    the single beeper as Karel is away from the
    single beeper at the beginning. Get Karel to the
    Beeper Mine! Try this without recursion.

13
lets write it
  • Step 1 What is the base case?
  • Karel is on the beeper
  • Step 2 What does Karel have to do in the base
    case?
  • turnLeft (this will face Karel north)
  • Step 3 What is the general case?
  • Karel is not on the beeper

14
lets write it
  • Step 4 What is the reduction?
  • Move one block forward, make the recursive call
    and have Karel execute a second move after the
    recursive call. This second move will be executed
    in all instances but the base case, causing Karel
    to make as many moves north after the base case
    as it did in getting to the base case.
  • Now, code it before we go on

15
Lost Beeper Mine solution
  • public void findMine()

lets trace the execution
Write a Comment
User Comments (0)
About PowerShow.com