Download presentation
Presentation is loading. Please wait.
Published byMelina Paul Modified over 9 years ago
1
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013 Recursion: The Mirrors Chapter 2
2
Contents Recursive Solutions Recursion That Returns a Value Recursion That Performs an Action Recursion with Arrays Organizing Data More Examples Recursion and Efficiency Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
3
Recursive Solutions Recursion breaks a problem into smaller identical problems Some recursive solutions are inefficient, impractical Complex problems can have simple recursive solutions Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
4
Recursive Solutions A recursive solution calls itself Each recursive call solves an identical, smaller problem Typically two parts: Base case: Condition upon which does not call itself Recursive case: Calls self with smaller problem(s) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
5
A Recursive Valued Function The factorial of n Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
6
Characteristics of Recursive Solutions At least: One base case and one recursive call to self Base case must be executed before recursive call Recursive functions must work with smaller problems (closer to base case) Must not skip over base case Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
7
A Recursive Valued Function FIGURE 2-2 fact(3) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
8
The Box Trace FIGURE 2-3 A box FIGURE 2-4 The beginning of the box trace Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
9
The Box Trace FIGURE 2-5 Box trace of fact(3) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
10
The Box Trace FIGURE 2-5 Box trace of fact(3) … continued Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
11
The Box Trace FIGURE 2-5 Box trace of fact(3) … continued Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
12
A Recursive Void Function FIGURE 2-6 A recursive solution Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
13
A Recursive Void Function Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013 The function writeBackwards
14
A Recursive Void Function FIGURE 2-7 Box trace of writeBackward("cat") Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
15
A Recursive Void Function FIGURE 2-7 writeBackward("cat") continued Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
16
A Recursive Void Function FIGURE 2-7 writeBackward("cat") continued Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
17
A Recursive Void Function FIGURE 2-8 Box trace of writeBackward("cat") in pseudocode Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
18
A Recursive Void Function FIGURE 2-8 Box trace of writeBackward("cat") in pseudocode (continued) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013`
19
A Recursive Void Function FIGURE 2-8 Box trace of writeBackward("cat") in pseudocode (continued) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
20
A Recursive Void Function FIGURE 2-8 Box trace of writeBackward("cat") in pseudocode (continued) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
21
A Recursive Void Function FIGURE 2-8 Box trace of writeBackward("cat") in pseudocode (continued) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
22
A Recursive Void Function FIGURE 2-8 Box trace of writeBackward("cat") in pseudocode (concluded) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
23
A Recursive Void Function FIGURE 2-9 Box trace of writeBackward2("cat") in pseudocode Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
24
A Recursive Void Function FIGURE 2-9 Box trace of writeBackward2("cat") in pseudocode (continued) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
25
A Recursive Void Function FIGURE 2-9 Box trace of writeBackward2("cat") in pseudocode (continued) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
26
A Recursive Void Function FIGURE 2-9 Box trace of writeBackward2("cat") in pseudocode (continued) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
27
A Recursive Void Function FIGURE 2-9 Box trace of writeBackward2("cat") in pseudocode (concluded) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
28
Writing an Array’s Entries in Backward Order Pseudocode Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
29
Writing an Array’s Entries in Backward Order Source code Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
30
The Binary Search A high-level binary search for the array problem Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
31
The Binary Search Issues to consider 1.How to pass a half array to recursive call 2.How to determine which half of array has target value 3.What is the base case? 4.How will result of binary search be indicated? Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
32
The Binary Search FIGURE 2-10 Box traces of binarySearch with anArray = : (a) a successful search for 9 Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
33
The Binary Search FIGURE 2-10 Box traces of binarySearch with anArray = : (b) an unsuccessful search for 6 Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
34
The Binary Search FIGURE 2-11 Box trace with a reference argument Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
35
Finding the Largest Value in an Array Recursive algorithm Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
36
Finding the Largest Value in an Array FIGURE 2-12 Recursive solution to the largest-value problem Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
37
Finding the Largest Value in an Array FIGURE 2-13 The recursive calls that maxArray( ) generates Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
38
Organizing Data Towers of Hanoi FIGURE 2-16 (a) The initial state; (b) move n – 1 disks from A to C; Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
39
Towers of Hanoi FIGURE 2-16 (c) move 1 disk from A to B; (d) move n – 1 disks from C to B Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
40
Towers of Hanoi Pseudocode solution: Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
41
Towers of Hanoi FIGURE 2-17 The order of recursive calls that results from solve Towers(3, A, B, C) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
42
Towers of Hanoi Source code for solveTowers Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
43
The Fibonacci Sequence (Multiplying Rabbits) Assumed “facts” about rabbits: Rabbits never die. A rabbit reaches sexual maturity exactly two months after birth Rabbits always born in male-female pairs. At the beginning of every month, each sexually mature male-female pair gives birth to exactly one male-female pair. Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
44
The Fibonacci Sequence (Multiplying Rabbits) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013 MonthRabbit Population 1One pair 2One pair, still 3Two pairs 4Three pairs 5Five pairs 68 pairs
45
The Fibonacci Sequence (Multiplying Rabbits) FIGURE 2-18 Recursive solution to the rabbit problem Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
46
The Fibonacci Sequence (Multiplying Rabbits) A C++ function to compute rabbit(n) Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
47
The Fibonacci Sequence (Multiplying Rabbits) FIGURE 2-19 The recursive calls that rabbit(7) generates Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
48
Choosing k Out of n Things Recursive solution: Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
49
Choosing k Out of n Things Recursive function: Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
50
Choosing k Out of n Things FIGURE 2-20 The recursive calls that g (4, 2) generates Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
51
Recursion and Efficiency Inefficiency factors Overhead associated with function calls Inherent inefficiency of some recursive algorithms Fibonacci: re-compute previously computed solution Principle: Do not use recursive solution if inefficient and clear, efficient iterative solution exists Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
52
End Chapter 2
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.