350 likes | 463 Views
Visual C++ Programming: Concepts and Projects. Chapter 10A: Recursion (Concepts). Objectives. In this chapter, you will: Discover how to recognize a recursive problem Code a recursive method Use recursion to draw fractal images Analyze recursion Create and code menus. Factorial Numbers.
E N D
Visual C++ Programming: Concepts and Projects Chapter 10A: Recursion (Concepts)
Objectives In this chapter, you will: • Discover how to recognize a recursive problem • Code a recursive method • Use recursion to draw fractal images • Analyze recursion • Create and code menus Programming with Visual C++
Factorial Numbers • Factorial numbers • Example: 5! = 5 x 4 x 3 x 2 x 1 • Can be easily computed using a loop Programming with Visual C++
Factorial Numbers (continued) • Factorial numbers • Can also be computed as separate steps from the bottom up • Solving the problem from the bottom up will lead us to a new solution strategy called recursion Programming with Visual C++
Recursion • Recursion • Refers to re-occurring events of a similar nature • Mathematical example: factorial numbers • Everyday example: a chain of phone calls • A problem (finding an apartment) must be solved by a chain of similar events (phone calls) • The events repeat themselves until an answer is obtained • The answer follows the same path back Programming with Visual C++
Recursion (continued) Programming with Visual C++
Recursion (continued) Programming with Visual C++
Recursion • Recursive solutions • Have a recursive case • A call to continue the same operation at another level • Have a base case • A stopping point • Use backtracking • To go back to the previous operation at a higher level Programming with Visual C++
Recursion (continued) • Algorithm for computing factorial numbers Programming with Visual C++
Recursion (continued) Programming with Visual C++
Recursion (continued) Programming with Visual C++
Recursion (continued) • Recursion and factorial numbers • Recursive definition of a factorial number (n!) • For all positive integers n, n! is defined as follows • If n = 0 or 1, then n! = 1 (this is the base case) • If n > 1, then n! = n x (n-1)! (this is the recursive case) Programming with Visual C++
Recursion (continued) • Recursive definitions can be translated easily into recursive methods • Example: Factorial()method Programming with Visual C++
Recursion (continued) Programming with Visual C++
Recursion (continued) Programming with Visual C++
Recursion vs. Iteration • Iteration is usually faster • Does not require background overhead to keep track of each method call • Recursion is more elegant • More closely matches the mathematical definition of the operation it is performing • Recursion can more easily solve some problems • Example: generating fractal images Programming with Visual C++
Recursion vs. Iteration (continued) Programming with Visual C++
Creating Fractal Images • Draw a line • Then draw three lines half the size (at 90 degree angles to one another) from the end of the line you just drew • Apply this strategy recursively to every line you draw • Do this until you have reached a predetermined stopping point (the base case) • Example: recursive crosses Programming with Visual C++
Creating Fractal Images (continued) Programming with Visual C++
Creating Fractal Images (continued) Programming with Visual C++
Creating Fractal Images (continued) Programming with Visual C++
Creating Fractal Images (continued) Programming with Visual C++
Creating Fractal Images (continued) Programming with Visual C++
Creating Fractal Images (continued) Programming with Visual C++
Computer-Generated Fractal Images • Drawing lines with Graphics class method DrawLine() • Use DrawLine() to create a line • Parameters • Pen • x1, y1 (coordinates of the start of the line) • x2, y2 (coordinates of the end of the line) Programming with Visual C++
Computer-Generated Fractal Images (continued) • The starting coordinates of the line are (x, y) • The ending coordinates are (newX, newY) • In a recursive solution, there are many levels of line-drawing tasks • The coordinates of the end of the previous line become the coordinates of the starting point of the next one Programming with Visual C++
Recursive DrawBranch() Method Programming with Visual C++
Recursive DrawBranch() Method (continued) • DrawBranch()is recursive • Each level of recursion draws three new lines from the end of the previous one • The DrawBranch() method is called three times to do this • The base case is the last level of recursion Programming with Visual C++
Recursive DrawBranch() Method (continued) Programming with Visual C++
Recursive DrawBranch() Method (continued) Programming with Visual C++
Recursive DrawBranch() Method (continued) • Algorithm for method DrawBranch() Programming with Visual C++
Recursive DrawBranch() Method (continued) • A single branch with five levels of recursion looks like a pattern of crosses • You will develop a program in the Tutorial to implement this Programming with Visual C++
Recursive DrawBranch() Method (continued) Programming with Visual C++
Summary • Recursion involves a method calling itself • Recursive methods must have: • A base case • A recursive case • Recursive backtracking • After the base case is reached, the method returns to the previous one • Backtracking continues until the program returns to the original method call Programming with Visual C++
Summary (continued) • Some problems have easy and elegant recursive solutions • Tasks with mathematically inductive definitions are naturally recursive • Example: factorial numbers • Example: fractal images Programming with Visual C++