recursion: the mirrors chapter 2 data structures and problem solving with c++: walls and mirrors,...
TRANSCRIPT
![Page 1: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/1.jpg)
Recursion: The Mirrors
Chapter 2
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 2: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/2.jpg)
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, Frank Carrano, © 2012
![Page 3: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/3.jpg)
Recursive Solutions
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
• Recursion breaks a problem into smaller identical problems
• Some recursive solutions are inefficient, impractical
• Complex problems can have simple recursive solutions
![Page 4: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/4.jpg)
Recursive Solutions
FIGURE 2-1 A recursive solution
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 5: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/5.jpg)
Recursive Solutions
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
• A recursive solution calls itself
• Each recursive call solves an identical, smaller problem
• Test for base case enables recursive calls to stop
• Eventually one of smaller calls will be base case
![Page 6: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/6.jpg)
A Recursive Valued Function
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
The factorial of n
![Page 7: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/7.jpg)
A Recursive Valued Function
FIGURE 2-2 fact(3)
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 8: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/8.jpg)
The Box Trace
FIGURE 2-3 A box
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
FIGURE 2-4 The beginning of the box trace
![Page 9: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/9.jpg)
The Box Trace
FIGURE 2-5 Box trace of fact(3)
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 10: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/10.jpg)
The Box Trace
FIGURE 2-5 Box trace of fact(3) … continued
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 11: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/11.jpg)
The Box Trace
FIGURE 2-5 Box trace of fact(3) … continued
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 12: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/12.jpg)
A Recursive Void Function
FIGURE 2-6 A recursive solution
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 13: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/13.jpg)
A Recursive Void Function
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
• The function writeBackward
![Page 14: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/14.jpg)
A Recursive Void Function
FIGURE 2-7 Box trace of writeBackward("cat")
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 15: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/15.jpg)
A Recursive Void Function
FIGURE 2-7 writeBackward("cat")continued
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 16: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/16.jpg)
A Recursive Void Function
FIGURE 2-7 writeBackward("cat")continued
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 17: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/17.jpg)
A Recursive Void Function
FIGURE 2-8 Box trace of writeBackward("cat") in pseudocode
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 18: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/18.jpg)
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, Frank Carrano, © 2012
![Page 19: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/19.jpg)
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, Frank Carrano, © 2012
![Page 20: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/20.jpg)
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, Frank Carrano, © 2012
![Page 21: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/21.jpg)
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, Frank Carrano, © 2012
![Page 22: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/22.jpg)
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, Frank Carrano, © 2012
![Page 23: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/23.jpg)
A Recursive Void Function
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
• The function writeBackward2
![Page 24: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/24.jpg)
A Recursive Void Function
FIGURE 2-9 Box trace of writeBackward2("cat") in pseudocode
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 25: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/25.jpg)
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, Frank Carrano, © 2012
![Page 26: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/26.jpg)
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, Frank Carrano, © 2012
![Page 27: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/27.jpg)
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, Frank Carrano, © 2012
![Page 28: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/28.jpg)
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, Frank Carrano, © 2012
![Page 29: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/29.jpg)
Writing an Array’s Entries in Backward Order
• Pseudocode
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 30: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/30.jpg)
Writing an Array’s Entries in Backward Order
• Source code
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 31: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/31.jpg)
The Binary Search
• A high-level binary search for the array problem
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 32: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/32.jpg)
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, Frank Carrano, © 2012
![Page 33: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/33.jpg)
The Binary Search
FIGURE 2-10 Box traces of binarySearch with anArray = <1, 5, 9, 12, 15, 21, 29, 31>:
(a) a successful search for 9
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 34: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/34.jpg)
The Binary Search
FIGURE 2-10 Box traces of binarySearch with anArray = <1, 5, 9, 12, 15, 21, 29, 31>:
(b) an unsuccessful search for 6
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 35: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/35.jpg)
The Binary Search
FIGURE 2-11 Box trace with a reference argument
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 36: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/36.jpg)
Finding the Largest Value in an Array
• Recursive algorithm
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 37: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/37.jpg)
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, Frank Carrano, © 2012
![Page 38: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/38.jpg)
Finding the Largest Value in an Array
FIGURE 2-13 The recursive calls that maxArray(<1,6,8,3>) generates
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 39: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/39.jpg)
Finding the kth Smallest Value of an Array
FIGURE 2-14 A sample array
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
The recursive solution proceeds by:
1.Selecting a pivot value in array
2.Cleverly arranging/partitioning, values in array about this pivot value
3.Recursively applying strategy to one of partitions
![Page 40: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/40.jpg)
Finding the kth Smallest Value of an Array
FIGURE 2-15 A partition about a pivot
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 41: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/41.jpg)
Finding the kth Smallest Value of an Array
High level pseudocode solution:
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 42: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/42.jpg)
Organizing DataTowers 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, Frank Carrano, © 2012
![Page 43: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/43.jpg)
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, Frank Carrano, © 2012
![Page 44: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/44.jpg)
Towers of Hanoi
Pseudocode solution:
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 45: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/45.jpg)
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, Frank Carrano, © 2012
![Page 46: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/46.jpg)
Towers of Hanoi
• Source code for solveTowers
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 47: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/47.jpg)
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, Frank Carrano, © 2012
![Page 48: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/48.jpg)
The Fibonacci Sequence(Multiplying Rabbits)
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
Month Rabbit Population
1 One pair
2 One pair, still
3 Two pairs
4 Three pairs
5 Five pairs
6 8 pairs
![Page 49: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/49.jpg)
The Fibonacci Sequence(Multiplying Rabbits)
FIGURE 2-18 Recursive solution to the rabbit problem
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 50: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/50.jpg)
The Fibonacci Sequence(Multiplying Rabbits)
• A C++ function to compute rabbit(n)
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 51: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/51.jpg)
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, Frank Carrano, © 2012
![Page 52: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/52.jpg)
Choosing k Out of n Things
• Recursive solution:
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 53: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/53.jpg)
Choosing k Out of n Things
• Recursive function:
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 54: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/54.jpg)
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, Frank Carrano, © 2012
![Page 55: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/55.jpg)
Recursion and Efficiency
• Inefficiency factors Overhead associated with function calls Inherent inefficiency of some recursive
algorithms
• Principle: Do not use recursive solution if inefficient and
clear, efficient iterative solution exists
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012
![Page 56: Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012](https://reader035.vdocuments.mx/reader035/viewer/2022081603/56649e625503460f94b5dcbf/html5/thumbnails/56.jpg)
End
Chapter 2
Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012