Presentation is loading. Please wait.

Presentation is loading. Please wait.

Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012.

Similar presentations


Presentation on theme: "Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012."— Presentation transcript:

1 Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

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, Frank Carrano, © 2012

3 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

4 Recursive Solutions FIGURE 2-1 A recursive solution Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

5 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

6 A Recursive Valued Function Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012 The factorial of n

7 A Recursive Valued Function FIGURE 2-2 fact(3) Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

8 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

9 The Box Trace FIGURE 2-5 Box trace of fact(3) Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

10 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

11 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

12 A Recursive Void Function FIGURE 2-6 A recursive solution Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

13 A Recursive Void Function Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012 The function writeBackward

14 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

15 A Recursive Void Function FIGURE 2-7 writeBackward("cat") continued Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

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, Frank Carrano, © 2012

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, Frank Carrano, © 2012

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, Frank Carrano, © 2012

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, Frank Carrano, © 2012

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, Frank Carrano, © 2012

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, Frank Carrano, © 2012

23 A Recursive Void Function Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012 The function writeBackward2

24 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

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, Frank Carrano, © 2012

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, Frank Carrano, © 2012

27 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

28 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

29 Writing an Array’s Entries in Backward Order Pseudocode Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

30 Writing an Array’s Entries in Backward Order Source code Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

31 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

32 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

33 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, Frank Carrano, © 2012

34 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, Frank Carrano, © 2012

35 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

36 Finding the Largest Value in an Array Recursive algorithm Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

37 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

38 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, Frank Carrano, © 2012

39 Finding the k th 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

40 Finding the k th 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

41 Finding the k th Smallest Value of an Array High level pseudocode solution: Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

42 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, Frank Carrano, © 2012

43 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

44 Towers of Hanoi Pseudocode solution: Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

45 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

46 Towers of Hanoi Source code for solveTowers Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

47 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

48 The Fibonacci Sequence (Multiplying Rabbits) Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012 MonthRabbit Population 1One pair 2One pair, still 3Two pairs 4Three pairs 5Five pairs 68 pairs

49 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

50 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

51 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

52 Choosing k Out of n Things Recursive solution: Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

53 Choosing k Out of n Things Recursive function: Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012

54 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

55 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

56 End Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012


Download ppt "Recursion: The Mirrors Chapter 2 Data Structures and Problem Solving with C++: Walls and Mirrors, Frank Carrano, © 2012."

Similar presentations


Ads by Google