Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 19: Recursion.

Slides:



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

Factorial Recursion stack Binary Search Towers of Hanoi
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.
Chapter 10 Recursion Instructor: alkar/demirer. Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-2 Recursive Function recursive functionThe.
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 14: Recursion by.
Chapter 19 Recursion.
Chapter 10 Recursion. Copyright © 2005 Pearson Addison-Wesley. All rights reserved Chapter Objectives Explain the underlying concepts of recursion.
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.
© 2006 Pearson Addison-Wesley. All rights reserved3-1 Chapter 3 Recursion: The Mirrors.
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.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 15 Recursive Algorithms.
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.
Chapter 14: Recursion Starting Out with C++ Early Objects
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 12: Recursion Problem Solving, Abstraction, and Design using C++
Chapter 13 Recursion. Topics Simple Recursion Recursion with a Return Value Recursion with Two Base Cases Binary Search Revisited Animation Using Recursion.
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2008 Pearson Education, Inc., Upper.
© 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.
Data Structures and Abstractions with Java, 4e Frank Carrano
Copyright © 2010 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with Programming Logic & Design Second Edition by Tony Gaddis.
1 Recursion. 2 Chapter 15 Topics  Meaning of Recursion  Base Case and General Case in Recursive Function Definitions  Writing Recursive Functions with.
Recursion Textbook chapter Recursive Function Call a recursive call is a function call in which the called function is the same as the one making.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley. Ver Chapter 2: Recursion: The Mirrors Data Abstraction & Problem Solving.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Java Software Solutions Foundations of Program Design Sixth Edition by Lewis.
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.
Chapter 4 Recursion. Copyright © 2004 Pearson Addison-Wesley. All rights reserved.1-2 Chapter Objectives Explain the underlying concepts of recursion.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley. Ver Recursive Solutions Recursion is an extremely powerful problem-solving.
CSC 221: Recursion. Recursion: Definition Function that solves a problem by relying on itself to compute the correct solution for a smaller version of.
Edited by Malak Abdullah Jordan University of Science and Technology Data Structures Using C++ 2E Chapter 6 Recursion.
Java Programming: Guided Learning with Early Objects Chapter 11 Recursion.
©TheMcGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 15 * Recursive Algorithms.
Instructor: Alexander Stoytchev CprE 185: Intro to Problem Solving (using C)
Recursion. Circular Definition (not useful) E.g., E.g., Projenitor: one who produces an offspring Projenitor: one who produces an offspring Offspring:
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 12 Recursion.
Starting Out with C++, 3 rd Edition Chapter 19 Recursion.
JAVA: An Introduction to Problem Solving & Programming, 7 th Ed. By Walter Savitch ISBN © 2015 Pearson Education, Inc., Upper Saddle River,
Lecture 7 – Repetition (Loop) FTMK, UTeM – Sem /2014.
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 Chapter 7 Copyright ©2012 by Pearson Education, Inc. All rights reserved.
Recursion Chapter 10 Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved X.
Recursion Chapter 10 Slides by Steve Armstrong LeTourneau University Longview, TX  2007,  Prentice Hall.
Chapter Topics Chapter 16 discusses the following main topics:
Chapter 19: Recursion.
Chapter 15 Recursion.
CprE 185: Intro to Problem Solving (using C)
Chapter 10 Recursion Instructor: Yuksel / Demirer.
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.
Recursive Thinking Chapter 9 introduces the technique of recursive programming. As you have seen, recursive programming involves spotting smaller occurrences.
Chapter 14: Recursion Starting Out with C++ Early Objects
Recursion "To understand recursion, one must first understand recursion." -Stephen Hawking.
Chapter 14: Recursion Starting Out with C++ Early Objects
Chapter 8: Recursion Java Software Solutions
Recursion Data Structures.
Chapter 8: Recursion Java Software Solutions
Chapter 19: Recursion.
Dr. Sampath Jayarathna Cal Poly Pomona
Chapter 3 :Recursion © 2011 Pearson Addison-Wesley. All rights reserved.
Presentation transcript:

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 19: Recursion

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Introduction to Recursion 19.1

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 19-3 Introduction to Recursion A recursive function contains a call to itself: void countDown(int num) { if (num == 0) cout << "Blastoff!"; else { cout << num << "...\n"; countDown(num-1); // recursive } // call }

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 19-4 What Happens When Called? If a program contains a line like countDown(2); 1.countDown(2) generates the output 2..., then it calls countDown(1) 2.countDown(1) generates the output 1..., then it calls countDown(0) 3.countDown(0) generates the output Blastoff!, then returns to countDown(1) 4.countDown(1) returns to countDown(2) 5.countDown(2) returns to the calling function

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 19-5 What Happens When Called? third call to countDown num is 0 countDown(1); countDown(0); // no // recursive // call second call to countDown num is 1 first call to countDown num is 2 output: Blastoff!

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 19-6 Recursive Functions - Purpose Recursive functions are used to reduce a complex problem to a simpler-to-solve problem. The simpler-to-solve problem is known as the base case Recursive calls stop when the base case is reached

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 19-7 Stopping the Recursion A recursive function must always include a test to determine if another recursive call should be made, or if the recursion should stop with this call In the sample program, the test is: if (num == 0)

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 19-8 Stopping the Recursion void countDown(int num) { if (num == 0) // test cout << "Blastoff!"; else { cout << num << "...\n"; countDown(num-1); // recursive } // call }

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 19-9 Stopping the Recursion Recursion uses a process of breaking a problem down into smaller problems until the problem can be solved In the countDown function, a different value is passed to the function each time it is called Eventually, the parameter reaches the value in the test, and the recursion stops

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Stopping the Recursion void countDown(int num) { if (num == 0) cout << "Blastoff!"; else { cout << num << "...\n"; countDown(num-1);// note that the value } // passed to recursive } // calls decreases by // one for each call

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley What Happens When Called? Each time a recursive function is called, a new copy of the function runs, with new instances of parameters and local variables created As each copy finishes executing, it returns to the copy of the function that called it When the initial copy finishes executing, it returns to the part of the program that made the initial call to the function

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley What Happens When Called? third call to countDown num is 0 countDown(1); countDown(0); // no // recursive // call second call to countDown num is 1 first call to countDown num is 2 output: Blastoff! return

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Types of Recursion Direct –a function calls itself Indirect –function A calls function B, and function B calls function A –function A calls function B, which calls …, which calls function A

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The Recursive Factorial Function The factorial function: n! = n*(n-1)*(n-2)*...*3*2*1 if n > 0 n! = 1 if n = 0 Can compute factorial of n if the factorial of (n-1) is known: n! = n * (n-1)! n = 0 is the base case

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The Recursive Factorial Function int factorial (int num) { if (num > 0) return num * factorial(num - 1); else return 1; }

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 19-16

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Program 19-3 (Continued)

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The Recursive gcd Function 19.3

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The Recursive gcd Function Greatest common divisor (gcd) is the largest factor that two integers have in common Computed using Euclid's algorithm: gcd(x, y) = y if y divides x evenly gcd(x, y) = gcd(y, x % y) otherwise gcd(x, y) = y is the base case

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The Recursive gcd Function int gcd(int x, int y) { if (x % y == 0) return y; else return gcd(y, x % y); }

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Solving Recursively Defined Problems 19.4

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 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 number is the sum of the two preceding numbers Recursive solution: fib(n) = fib(n – 1) + fib(n – 2); Base cases: n <= 0, n == 1

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Solving Recursively Defined Problems int fib(int n) { if (n <= 0) return 0; else if (n == 1) return 1; else return fib(n – 1) + fib(n – 2); }

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Recursive Linked List Operations 19.5

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Recursive Linked List Operations Recursive functions can be members of a linked list class Some applications: –Compute the size of (number of nodes in) a list –Traverse the list in reverse order

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Counting the Nodes in a Linked List Uses a pointer to visit each node Algorithm: –pointer starts at head of list –If pointer is NULL, return 0 (base case) else, return 1 + number of nodes in the list pointed to by current node See the NumberList class in Chapter 19

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The countNodes function, a private member function The countNodes function is executed by the public numNodes function: int numNodes() const { return countNodes(head); }

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Contents of a List in Reverse Order Algorithm: –pointer starts at head of list –If the pointer is NULL, return (base case) –If the pointer is not NULL, advance to next node –Upon returning from recursive call, display contents of current node

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The showReverse function, a private member function The showReverse function is executed by the public displayBackwards function: void displayBackwards() const { showReverse(head); }

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley A Recursive Binary Search Function 19.6

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley A Recursive Binary Search Function Binary search algorithm can easily be written to use recursion Base cases: desired value is found, or no more array elements to search Algorithm (array in ascending order): –If middle element of array segment is desired value, then done –Else, if the middle element is too large, repeat binary search in first half of array segment –Else, if the middle element is too small, repeat binary search on the second half of array segment

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley A Recursive Binary Search Function (Continued)

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The Towers of Hanoi 19.7

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The Towers of Hanoi The Towers of Hanoi is a mathematical game that is often used to demonstrate the power of recursion. The game uses three pegs and a set of discs, stacked on one of the pegs.

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The Towers of Hanoi The object of the game is to move the discs from the first peg to the third peg. Here are the rules: –Only one disc may be moved at a time. –A disc cannot be placed on top of a smaller disc. –All discs must be stored on a peg except while being moved.

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Moving Three Discs

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The Towers of Hanoi The following statement describes the overall solution to the problem: –Move n discs from peg 1 to peg 3 using peg 2 as a temporary peg.

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The Towers of Hanoi Algorithm –To move n discs from peg A to peg C, using peg B as a temporary peg: If n > 0 Then Move n – 1 discs from peg A to peg B, using peg C as a temporary peg. Move the remaining disc from the peg A to peg C. Move n – 1 discs from peg B to peg C, using peg A as a temporary peg. End If

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 19-39

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 19-40

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Program (Continued)

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The QuickSort Algorithm 19.8

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The QuickSort Algorithm Recursive algorithm that can sort an array or a linear linked list Determines an element/node to use as pivot value: pivot sublist 1 sublist 2

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The QuickSort Algorithm Once pivot value is determined, values are shifted so that elements in sublist1 are pivot Algorithm then sorts sublist1 and sublist2 Base case: sublist has size 1 pivot value sublist 1 sublist 2

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Exhaustive and Enumeration Algorithms 19.9

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Exhaustive and Enumeration Algorithms 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 Uses the generation of all possible combinations when determining the optimal one.

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Recursion vs. Iteration 19.10

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Recursion vs. Iteration Benefits (+), disadvantages(-) for recursion: +Models certain algorithms most accurately +Results in shorter, simpler functions –May not execute very efficiently Benefits (+), disadvantages(-) for iteration: +Executes more efficiently than recursion –Often is harder to code or understand