Vous êtes sur la page 1sur 19

# Chapter 13:

Recursion

Second Edition

by Tony Gaddis

## Copyright 2010 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

Chapter Topics
13.1 Introduction to Recursion
13.2 Problem Solving with Recursion
13.3 Examples of Recursive Algorithms

13-2

## 13.1 Introduction to Recursion

A recursive module is a module that calls itself
When this happens, it becomes like an infinite loop
because there may be no way to break out
Depth of Recursion is the number of times that a
module calls itself
Recursion should be written so that it can
eventually break away
This can be done with an If statement

13-3

13-4

## 13.2 Problem Solving with Recursion

A problem can be solved with recursion if it can
be broken down into successive smaller
problems that are identical to the overall
problems
This process is never required, as a loop can do
the same thing
It is generally less efficient to use than loops
because it causes more overhead (use of system
resources such as memory)

13-5

## 13.2 Problem Solving with Recursion

How it works
If the problem can be solved now, then the
module solves it and ends
If not, then the module reduces it to a smaller but
similar problem and calls itself to solve the
smaller problem
A Base Case is where a problem can be solved
without recursion
A Recursive Case is where recursion is used to
solve the problem

13-6

## 13.2 Problem Solving with Recursion

Using recursion to calculate the factorial of a
number
A factorial is defined as n! whereas n is the
number you want to solve
4! or four factorial mean 1*2*3*4 = 24
5! or five factorial means 1*2*3*4*5 = 120
0! is always 1

13-7

Continued

13-8

13-9

## 13.2 Problem Solving with Recursion

Inside Program 13-3
Inside the function, if n is 0, then the function
returns a 1, as the problem is solved
Else, Return n * factorial(n-1) is processed and
the function is called again
While the Else does return a value, it does not do
that until the value of factorial(n-1) is solved

13-10

## 13.2 Problem Solving with Recursion

Figure 13-4 The value of n and the return value during each call of the function

13-11

## 13.3 Examples of Recursive Algorithms

Summing a Range of Array Elements with Recursion

Continued
Copyright 2010 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

13-12

## 13.3 Examples of Recursive Algorithms

Summing a Range of Array Elements with Recursion

13-13

## 13.3 Examples of Recursive Algorithms

Inside Program 13-4

## start and end represent the array range

Return array[start] + rangeSum(array, start+1), end)
This continuously returns the value of the first
element in the range plus the sum of the rest of the
elements in the range
It only breaks out when start is greater than end
start must be incremented

13-14

## 13.3 Examples of Recursive Algorithms

The Fibonacci Series

Continued
Copyright 2010 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

13-15

## 13.3 Examples of Recursive Algorithms

The Fibonacci Series

13-16

## 13.3 Examples of Recursive Algorithms

Inside Program 13-5
The Fibonacci numbers are 0,1,1,2,3,5,8,13,21
After the second number, each number in the
series is the sum of the two previous numbers
The recursive function continuously processes
the calculation until the limit is reached as
defined in the for loop in the main module

13-17

## 13.3 Examples of Recursive Algorithms

Additional examples that can be solved with
recursion
The Greatest Common Divisor
A Recursive Binary Search
The Towers of Hanoi

13-18

## 13.3 Examples of Recursive Algorithms

Recursion vs. Looping
Reasons not to use recursion

## They are certainly less efficient than iterative

algorithms because of the overhead
Harder to discern what is going on with recursion

## The speed and amount of memory available to modern

computers diminishes the overhead factor

13-19