C Programming: From Problem Analysis to Program Design, Third Edition - PowerPoint PPT Presentation

1 / 44
About This Presentation
Title:

C Programming: From Problem Analysis to Program Design, Third Edition

Description:

Assume that a computer can generate 1 billion (109) moves per second. ... A recursive definition defines a problem in terms of smaller versions of itself ... – PowerPoint PPT presentation

Number of Views:89
Avg rating:3.0/5.0
Slides: 45
Provided by: course249
Category:

less

Transcript and Presenter's Notes

Title: C Programming: From Problem Analysis to Program Design, Third Edition


1
C Programming From Problem Analysis to
Program Design, Third Edition
  • Chapter 17 Recursion

2
Objectives
  • In this chapter you will
  • Learn about recursive definitions
  • Explore the base case and the general case of a
    recursive definition
  • Discover what is a recursive algorithm
  • Learn about recursive functions
  • Explore how to use recursive functions to
    implement recursive algorithms

3
Recursive Definitions
  • Recursion solving a problem by reducing it to
    smaller versions of itself
  • 0! 1 (1)
  • n! n x (n-1)! if n gt 0 (2)
  • The definition of factorial in equations (1) and
    (2) is called a recursive definition
  • Equation (1) is called the base case
  • Equation (2) is called the general case

4
Recursive Definitions (continued)
  • Recursive definition defining a problem in terms
    of a smaller version of itself
  • Every recursive definition must have one (or
    more) base cases
  • The general case must eventually reduce to a base
    case
  • The base case stops the recursion

5
Recursive Algorithms
  • Recursive algorithm finds a solution by reducing
    problem to smaller versions of itself
  • Must have one (or more) base cases
  • General solution must eventually reduce to a base
    case
  • Recursive function a function that calls itself
  • Recursive algorithms are implemented using
    recursive functions

6
Recursive Functions (continued)
  • Think of a recursive function as having
    infinitely many copies of itself
  • Every call to a recursive function has
  • Its own code
  • Its own set of parameters and local variables
  • After completing a particular recursive call
  • Control goes back to the calling environment,
    which is the previous call

7
Recursive Functions (continued)
  • The current (recursive) call must execute
    completely before control goes back to the
    previous call
  • Execution in the previous call begins from the
    point immediately following the recursive call
  • Tail recursive function A recursive function in
    which the last statement executed is the
    recursive call
  • Example the function fact

8
(No Transcript)
9
(No Transcript)
10
Direct and Indirect Recursion
  • Directly recursive a function that calls itself
  • Indirectly recursive a function that calls
    another function and eventually results in the
    original function call

11
Infinite Recursion
  • Infinite recursion every recursive call results
    in another recursive call
  • In theory, infinite recursion executes forever
  • Because computer memory is finite
  • Function executes until the system runs out of
    memory
  • Results in an abnormal program termination

12
Infinite Recursion (continued)
  • To design a recursive function
  • Understand problem requirements
  • Determine limiting conditions
  • Identify base cases and provide a direct solution
    to each base case
  • Identify general cases and provide a solution to
    each general case in terms of smaller versions of
    itself

13
Problem Solving Using Recursion
  • General case List size is greater than 1
  • To find the largest element in lista...listb
  • Find largest element in lista 1...listb and
    call it max
  • Compare the elements lista and max
  • if (lista gt max)
  • the largest element in lista...listb is
  • lista
  • otherwise
  • the largest element in lista...listb
    is max

14
Problem Solving Using Recursion (continued)
Example 17-1 Largest Element in an Array
15
Problem Solving Using Recursion (continued)
  • Example 17-1 Largest Element in an Array
  • lista...listb stands for the array elements
    lista, lista 1, ..., listb.
  • list0...list5 represents the array elements
    list0, list1, list2, list3, list4, and
    list5.
  • If list is of length 1, then list has only one
    element, which is the largest element.
  • Suppose the length of list is greater than 1.
  • To find the largest element in lista...listb,
    we first find the largest element in lista
    1...listb and then compare this largest
    element with lista.
  • The largest element in lista...listb is given
    by
  • maximum(lista, largest(lista 1...listb))

16
(No Transcript)
17
(No Transcript)
18
(No Transcript)
19
Example 17-2 Fibonacci Number
20
(No Transcript)
21
(No Transcript)
22
(No Transcript)
23
(No Transcript)
24
Example 17-3 Tower of Hanoi
25
(No Transcript)
26
(No Transcript)
27
(No Transcript)
28
  • Let us determine how long it would take to move
    all 64 disks from needle 1 to needle 3.
  • If needle 1 contains 3 disks, then the number of
    moves required to move all 3 disks from needle 1
    to needle 3 is 23 ? 1 7.
  • If needle 1 contains 64 disks, then the number of
    moves required to move all 64 disks from needle 1
    to needle 3 is 264 ? 1.
  • Because 210 1024 1000 103, we have
  • 264 24 260 24 1018 1.6 1019
  • The number of seconds in one year is
    approximately 3.2 107.
  • Suppose the priests move one disk per second and
    they do not rest.
  • Now
  • 1.6 1019 5 3.2 1018 5 (3.2 107)
    1011
  • (3.2 107) (5 1011)
  • The time required to move all 64 disks from
    needle 1 to needle 3 is roughly 5 1011 years.

29
  • It is estimated that our universe is about 15
    billion years old (1.5 1010).
  • Also,
  • 5 1011 50 1010 33 (1.5 1010).
  • This calculation shows that our universe would
    last about 33 times as long as it already has.
  • Assume that a computer can generate 1 billion
    (109) moves per second. Then the number of moves
    that the computer can generate in one year is
  • (3.2 107) 109 3.2 1016
  • So the computer time required to generate 264
    moves is
  • 264 1.6 1019 1.6 1016 103 (3.2
    1016) 500
  • Thus, it would take about 500 years for the
    computer to generate 264 moves at the rate of 1
    billion moves per second.

30
Recursion or Iteration?
  • There are usually two ways to solve a particular
    problem
  • Iteration (looping)
  • Recursion
  • Which method is betteriteration or recursion?
  • In addition to the nature of the problem, the
    other key factor in determining the best solution
    method is efficiency

31
Memory allocation
  • Whenever a function is called
  • Memory space for its formal parameters and
    (automatic) local variables is allocated
  • When the function terminates
  • That memory space is then deallocated
  • Every (recursive) call has its own set of
    parameters and (automatic) local variables

32
Efficiency
  • Overhead associated with executing a (recursive)
    function in terms of
  • Memory space
  • Computer time
  • A recursive function executes more slowly than
    its iterative counterpart

33
Efficiency (continued)
  • On slower computers, especially those with
    limited memory space
  • The slow execution of a recursive function would
    be visible
  • Todays computers are fast and have inexpensive
    memory
  • Execution of a recursion function is not
    noticeable

34
Efficiency (continued)
  • The choice between the two alternatives depends
    on the nature of the problem
  • For problems such as mission control systems
  • Efficiency is absolutely critical and dictates
    the solution method

35
Efficiency (continued)
  • An iterative solution is more obvious and easier
    to understand than a recursive solution
  • If the definition of a problem is inherently
    recursive
  • Consider a recursive solution

36
Programming Example
  • Use recursion to convert a non-negative integer
    in decimal format (base 10) into the equivalent
    binary number (base 2)
  • Define some terms
  • Let x be an integer
  • The remainder of x after division by 2 is the
    rightmost bit of x
  • The rightmost bit of 33 is 1 because 33 2 is 1
  • The rightmost bit of 28 is 0 because 28 2 is 0

37
Programming Example (continued)
  • To find the binary representation of 35
  • Divide 35 by 2
  • The quotient is 17 and the remainder is 1
  • Divide 17 by 2
  • The quotient is 8 and the remainder is 1
  • Divide 8 by 2
  • The quotient is 4 and the remainder is 0
  • Continue this process until the quotient becomes 0

38
Programming Example (continued)
  • The rightmost bit of 35 cannot be printed until
    we have printed the rightmost bit of 17
  • The rightmost bit of 17 cannot be printed until
    we have printed the rightmost bit of 8, and so on

39
Programming Example (continued)
  • The binary representation of 35 is the binary
    representation of 17 (the quotient of 35 after
    division by 2) followed by the rightmost bit of
    35

40
(No Transcript)
41
(No Transcript)
42
Summary
  • The process of solving a problem by reducing it
    to smaller versions of itself is called recursion
  • A recursive definition defines a problem in terms
    of smaller versions of itself
  • Every recursive definition has one or more base
    cases
  • A recursive algorithm solves a problem by
    reducing it to smaller versions of itself
  • Every recursive algorithm has one or more base
    cases

43
Summary (continued)
  • The solution to the problem in a base case is
    obtained directly
  • A function is called recursive if it calls itself
  • Recursive algorithms are implemented using
    recursive functions
  • Every recursive function must have one or more
    base cases
  • The general solution breaks the problem into
    smaller versions of itself

44
Summary (continued)
  • The general case must eventually be reduced to a
    base case
  • The base case stops the recursion
  • Directly recursive a function calls itself
  • Indirectly recursive a function calls another
    function and eventually calls the original
  • Tail recursive the last statement executed is
    the recursive call
Write a Comment
User Comments (0)
About PowerShow.com