Chapter 14: Recursion Starting Out with C++ Early Objects

Slides:



Advertisements
Similar presentations
Starting Out with Java: From Control Structures through Objects
Advertisements

Lesson 19 Recursion CS1 -- John Cole1. Recursion 1. (n) The act of cursing again. 2. see recursion 3. The concept of functions which can call themselves.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Chapter 19 Recursion.
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 14: Recursion by.
1 CSCD 300 Data Structures Recursion. 2 Proof by Induction Introduction only - topic will be covered in detail in CS 320 Prove: N   i = N ( N + 1.
Chapter 2 Recursion: The Mirrors. © 2005 Pearson Addison-Wesley. All rights reserved2-2 Recursive Solutions Recursion is an extremely powerful problem-solving.
Chapter 19 Recursion.
Recursive Algorithms Nelson Padua-Perez Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
Chapter 15 Recursive Algorithms. 2 Recursion Recursion is a programming technique in which a method can call itself to solve a problem A recursive definition.
Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 14 Recursion.
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with Java: Early Objects Third Edition by Tony Gaddis Chapter.
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 1 Chapter 20 Recursion.
Introduction to Programming (in C++) Recursion Jordi Cortadella, Ricard Gavaldà, Fernando Orejas Dept. of Computer Science, UPC.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 19: Recursion.
Recursion Chapter 7 Copyright ©2012 by Pearson Education, Inc. All rights reserved.
Copyright © 2014, 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Eighth Edition by Tony Gaddis,
Copyright 2003 Scott/Jones Publishing Standard Version of Starting Out with C++, 4th Edition Chapter 19 Recursion.
 2003 Prentice Hall, Inc. All rights reserved. 1 Functions and Recursion Outline Function Templates Recursion Example Using Recursion: The Fibonacci Series.
C++ Programming: From Problem Analysis to Program Design, Third Edition Chapter 17: Recursion.
Chapter 13 Recursion. Topics Simple Recursion Recursion with a Return Value Recursion with Two Base Cases Binary Search Revisited Animation Using Recursion.
© 2010 Pearson Addison-Wesley. All rights reserved. Addison Wesley is an imprint of Chapter 15: Recursion Starting Out with Java: From Control Structures.
Copyright © 2011 Pearson Education, Inc. Starting Out with Java: Early Objects Fourth Edition by Tony Gaddis Chapter 14: Recursion.
15-1 Chapter-18: Recursive Methods –Introduction to Recursion –Solving Problems with Recursion –Examples of Recursive Methods.
Copyright © 2015 Pearson Education, Inc. Publishing as Pearson Addison-Wesley C H A P T E R 12 Recursion.
Copyright © 2010 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with Programming Logic & Design Second Edition by Tony Gaddis.
Copyright © 2010 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with Programming Logic & Design Second Edition by Tony Gaddis.
Chapter 14 Recursion. Chapter Objectives Learn about recursive definitions Explore the base case and the general case of a recursive definition Learn.
Review Introduction to Searching External and Internal Searching Types of Searching Linear or sequential search Binary Search Algorithms for Linear Search.
Data Structures R e c u r s i o n. Recursive Thinking Recursion is a problem-solving approach that can be used to generate simple solutions to certain.
Java Programming: Guided Learning with Early Objects Chapter 11 Recursion.
©TheMcGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 15 * Recursive Algorithms.
Data Structure and Algorithms. Algorithms: efficiency and complexity Recursion Reading Algorithms.
Chapter 6 Recursion. Solving simple problems Iteration can be replaced by a recursive function Recursion is the process of a function calling itself.
Recursion. Circular Definition (not useful) E.g., E.g., Projenitor: one who produces an offspring Projenitor: one who produces an offspring Offspring:
Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 1 Chapter 18 Recursion.
Programming With Java ICS201 University Of Ha’il1 Chapter 11 Recursion.
Concepts of Algorithms CSC-244 Unit 5 and 6 Recursion Shahid Iqbal Lone Computer College Qassim University K.S.A.
Starting Out with C++, 3 rd Edition Chapter 19 Recursion.
1 Recursion. 2 A process by which a function calls itself repeatedly  Either directly. X calls X  Or cyclically in a chain. X calls Y, and Y calls X.
JAVA: An Introduction to Problem Solving & Programming, 7 th Ed. By Walter Savitch ISBN © 2015 Pearson Education, Inc., Upper Saddle River,
1 Recursion Recursive function: a function that calls itself (directly or indirectly). Recursion is often a good alternative to iteration (loops). Its.
Maitrayee Mukerji. Factorial For any positive integer n, its factorial is n! is: n! = 1 * 2 * 3 * 4* ….* (n-1) * n 0! = 1 1 ! = 1 2! = 1 * 2 = 2 5! =
CS 116 Object Oriented Programming II Lecture 13 Acknowledgement: Contains materials provided by George Koutsogiannakis and Matt Bauer.
Recursion by Ender Ozcan. Recursion in computing Recursion in computer programming defines a function in terms of itself. Recursion in computer programming.
Copyright © 2014, 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Eighth Edition by Tony Gaddis,
Data Abstraction and Problem Solving with JAVA Walls and Mirrors Frank M. Carrano and Janet J. Prichard © 2001 Addison Wesley Data Abstraction and Problem.
CS212: Data Structures and Algorithms
Chapter Topics Chapter 16 discusses the following main topics:
Chapter 19: Recursion.
Chapter 15 Recursion.
CprE 185: Intro to Problem Solving (using C)
OBJECT ORIENTED PROGRAMMING II LECTURE 23 GEORGE KOUTSOGIANNAKIS
Recursion: The Mirrors
Chapter 15 Recursion.
Chapter 14: Recursion Starting Out with C++ Early Objects
Recursive Thinking Chapter 9 introduces the technique of recursive programming. As you have seen, recursive programming involves spotting smaller occurrences.
Chapter 8: Recursion Java Software Solutions
Recursion Chapter 10.
Chapter 14: Recursion Starting Out with C++ Early Objects
Recursion "To understand recursion, one must first understand recursion." -Stephen Hawking.
Recursion Chapter 11.
Chapter 14: Recursion Starting Out with C++ Early Objects
Chapter 8: Recursion Java Software Solutions
Recursion Data Structures.
7.Recursion Recursion is the name given for expression anything in terms of itself. Recursive function is a function which calls itself until a particular.
Chapter 8: Recursion Java Software Solutions
Chapter 19: Recursion.
Dr. Sampath Jayarathna Cal Poly Pomona
Recursive Algorithms 1 Building a Ruler: drawRuler()
Chapter 3 :Recursion © 2011 Pearson Addison-Wesley. All rights reserved.
Presentation transcript:

Chapter 14: Recursion Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy Walters, and Godfrey Muganda

Topics 14.1 Introduction to Recursion 14.2 The Recursive Factorial Function 14.3 The Recursive gcd Function 14.4 Solving Recursively Defined Problems 14.5 A Recursive Binary Search Function 14.6 The QuickSort Algorithm 14.7 The Towers of Hanoi 14.8 Exhaustive and Enumeration Algorithms 14.9 Recursion Versus Iteration

14.1 Introduction to Recursion Recursive function: a function that calls itself. Solving problems that can be broken down into smaller or simpler sub-problems of the same type. Generally used to replace a loop

Recursion Advantages Disadvantages Simple & clean solutions to complex problems Short solutions Disadvantages Overhead of repeated function calls Inherent efficiency of some solutions

Two Parts of recursive Function Base Case (Base Step): point at which the splitting of the problem stops. Recursive Step: Function calls itself with a smaller parameter Both parts MUST be present Generally, no loops in recursive function

Some recursive ProblEms Factorial Fact(N) = N * Fact(N-1) Fact (1) = 1, Fact(1) = 1, Fact(2) = 2 Exponentiation (Ny) Exp(N, y) = N * Exp(N,y-1) Fact(N,1) = N BinarySearch BinS(Size) = BinS(Size/2) BinS(1) = T or F

Recursive Functions Consider a function for solving the count-down problem from some number num down to 0: base case: num is already 0: the problem is solved & we “blast off!” If num is greater than 0, count off num & then recursively count down from num-1

Recursive Functions A recursive function for counting down to 0: void countDown(int num) { if (num == 0) cout << "Blastoff!"; else cout << num << ". . ."; countDown(num-1); // recursive } // call }

What Happens When Called? If a program contains a line like countDown(2); countDown(2) generates the output 2..., then it calls countDown(1) countDown(1) generates the output 1..., then it calls countDown(0) countDown(0) generates the output Blastoff!, then returns to countDown(1) countDown(1) returns to countDown(2) countDown(2)returns to the calling function See pr14-01.cpp, pr14-02.cpp

What Happens When Called? first call to countDown num is 2 OUTPUT: 2... countDown(1); second call to countDown num is 1 1... countDown(0); third call to countDown num is 0 Blastoff! // no // recursive // call

Stopping the Recursion A recursive function MUST include a test for base cases Can be more than one base case. In the sample program, the test is: if (num == 0)

Stopping the Recursion void countDown(int num) { if (num == 0) // test cout << "Blastoff!"; else cout << num << "...\n"; countDown(num-1); // recursive } // call }

Stopping the Recursion With each recursive call, parameter controlling the recursion moves closer to base case Eventually, parameter reaches the base case & chain of recursive calls terminates Usually, parameter – x or parameter / x

Stopping the Recursion void countDown(int num) { if (num == 0) // base case cout << "Blastoff!"; else { cout << num << "...\n"; countDown(num-1); } Value passed to recursive call is closer to base case of num = 0.

What Happens When Called? Each time a recursive function is called, a new copy of the function runs, with new instances of parameters & local variables being created As each copy finishes executing, it returns to copy of function that called it When initial copy finishes executing, it returns to part of the program that made initial call to function See pr14-03.cpp

Types of Recursion Direct recursion* Indirect recursion a function calls itself Indirect recursion function A calls function B, and function B calls function A. Or, function A calls function B, which calls …, which calls function A

14.2 The Recursive Factorial Function Factorial of nonnegative integer n is product of all positive integers less or equal to n Factorial of n is denoted by n! The factorial of 0 is 1 0 ! = 1 n ! = n x (n-1) x … x 2 x 1 if n > 0

Recursive Factorial Function Factorial of n can be expressed in terms of the factorial of n-1 0 ! = 1 n ! = n x (n-1) ! Recursive function int factorial(int n) { if (n == 0) return 1; else return n *factorial(n-1); } See pr14-04.cpp

Modified Recursive Factorial int Fact(int n) { if (n == 0) return 1; else if (n == 1 || n == 2) return n; else return n * Fact(n-1); } Advantage or Disadvantage?? See pr14-04.cpp

Factorial Example Fact(6) = 6 * Fact(5) = 5 * Fact(4) = 4 * Fact(3) = 2 Now return values back to previous call. If stop at 2, why the base cases for 1 & 0??

14.3 The Recursive gcd Function Greatest common divisor (gcd) of 2 integers x & y is largest number that divides both x & y The Greek mathematician Euclid discovered that If y divides x, then gcd(x, y) is just y Otherwise, the gcd(x, y) is the gcd of y & remainder of x divided by y

The Recursive gcd Function int gcd(int x, int y) { if (x % y == 0) //base case return y; else return gcd(y, x % y); } See pr14-05.cpp

Recursive gcd Example gcd(10,5) = // 10%5 = 0 return 5 ~~~~~~~~~~~~~ See pr14-05.cpp

14.4 Solving Recursively Defined Problems The natural definition of some problems leads to a recursive solution Example: Fibonacci numbers: 0, 1, 1, 2, 3, 5, 8, 13, 21, ... After the starting 0, 1, each term is the sum of the two preceding terms Recursive solution: fib(n) = fib(n – 1) + fib(n – 2); Base cases: n == 0, n == 1

Recursive Fibonacci Function // n is (n-1)th element in sequence int fib(int n) { if (n <= 0) // base case return 0; else if (n == 1) // base case return 1; else return fib(n – 1) + fib(n – 2); } See pr14-06.cpp

Fib(3) + Fib (2) + Fib(2) + Fib(1) Fibonacci Example Fib(5) = Fib(4) + Fib (3) Fib(3) + Fib (2) + Fib(2) + Fib(1) Fib(2) + Fib(1) + Fib(2) + Fib(1) +Fib(1) + Fib(0) + 1 2 more levels *Recursion is NOT most efficient way to solve this problem. In fact, a very inefficient way

14.8 Recursion vs. Iteration Benefits (+), disadvantages for recursion: Natural formulation of solution to certain problems Results in shorter, simpler functions May not execute very efficiently Benefits (+), disadvantages for iteration: Executes more efficiently than recursion May not be as natural as recursion for some problems

Homework Chapter 14 (p. 930) Questions 1 – 8 Programming Challenges 1, 2, 4, 5, 7

14.5 A Recursive Binary Search Function Assume an array a, sorted in ascending order, & an item X Write a function that searches for X within the array a returns index of X if it is found, returns -1 if X is not in the array

Recursive Binary Search A recursive strategy for searching a portion of the array from index lo to index hi is to set m to index of the middle portion of array: m lo hi

Recursive Binary Search If a[m] == X, found X, so return m If a[m] > X, recursively search a[lo..m-1] If a[m] < X, recursively search a[m+1..hi] m lo hi

Recursive Binary Search int bSearch(int a[],int lo,int hi,int X) { int m = (lo + hi) /2; if(lo > hi) return -1; // base if(a[m] == X) return m; // base if(a[m] > X) return bsearch(a,lo,m-1,X); else return bsearch(a,m+1,hi,X); } See pr14-07.cpp

14.6 The QuickSort Algorithm Fast, recursive sort algorithm for arrays First, determine an element to use as pivot value can select pivot by any strategy “hope” the pivot is near the middle of the range of values in the array

The QuickSort Algorithm pivot value sublist 1 sublist 2 Then, values are moved so that elements in sublist1 are < pivot and elements in sublist2 are >= pivot Algorithm then recursively sorts sublist1 and sublist2 Base case: sublist has size <=1 See pr14-08.cpp

14.7 The Towers of Hanoi Setup: 3 pegs, one has n disks on it, the other two pegs empty. The disks are arranged in increasing diameter, top bottom Objective: move the disks from peg 1 to peg 3, observing only one disk moves at a time all remain on pegs except the one being moved a larger disk cannot be placed on top of a smaller disk at any time

The Towers of Hanoi How it works: n=1 Move disk from peg 1 to peg 3. Done. n=2 Move top disk from peg 1 to peg 2. Move remaining disk from peg 1 to peg 3. Move disk from peg 2 to peg 3.

Outline of Recursive Algorithm If n==0, do nothing (base case) If n>0, then Move the topmost n-1 disks from peg1 to peg2 Move the nth disk from peg1 to peg3 Move the n-1 disks from peg2 to peg3 end if See pr14-09.cpp

14.8 Exhaustive and Enumeration Algorithms Enumeration algorithm: generate all possible combinations Example: all possible ways to make change for a certain amount of money Exhaustive algorithm: search a set of combinations to find an optimal one Example: change for a certain amount of money that uses the fewest coins See pr14-10.cpp