Edited by Malak Abdullah Jordan University of Science and Technology Data Structures Using C++ 2E Chapter 6 Recursion.

Slides:



Advertisements
Similar presentations
C++ Programming:. Program Design Including
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.
C++ Programming: Program Design Including Data Structures, Third Edition Chapter 16: Recursion.
C++ Programming: Program Design Including Data Structures, Third Edition Chapter 17: Linked Lists.
Chapter 2 Recursion: The Mirrors. © 2005 Pearson Addison-Wesley. All rights reserved2-2 Recursive Solutions Recursion is an extremely powerful problem-solving.
Recursion. Learn about recursive definitions Explore the base case and the general case of a recursive definition Learn about recursive algorithms Lecture.
Chapter 10 Recursion. Copyright © 2005 Pearson Addison-Wesley. All rights reserved Chapter Objectives Explain the underlying concepts of recursion.
1 Chapter 18 Recursion Dale/Weems/Headington. 2 Chapter 18 Topics l Meaning of Recursion l Base Case and General Case in Recursive Function Definitions.
Recursion. Recursive Solutions Recursion breaks a problem into smaller identical problems – mirror images so to speak. By continuing to do this, eventually.
© 2006 Pearson Addison-Wesley. All rights reserved3-1 Chapter 3 Recursion: The Mirrors.
Data Structures Using C++1 Chapter 6 Recursion. Data Structures Using C++2 Chapter Objectives Learn about recursive definitions Explore the base case.
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 16: Recursion.
Data Structures Using C++ 2E Chapter 6 Recursion.
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.
Data Structures Using C++ 2E Chapter 6 Recursion.
Chapter 14: Recursion Starting Out with C++ Early Objects
Data Structures Using C++1 Chapter 6 Recursion. Data Structures Using C++2 Chapter Objectives Learn about recursive definitions Explore the base case.
Chapter 2 Recursion: The Mirrors CS Data Structures Mehmet H Gunes Modified from authors’ slides.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 12: Recursion Problem Solving, Abstraction, and Design using C++
C++ Programming: From Problem Analysis to Program Design, Third Edition Chapter 17: Recursion.
Department of Computer Science Data Structures Using C++ 2E Chapter 6: Recursion Learn about recursive Definitions Algorithms Functions Explore the base.
© 2006 Pearson Addison-Wesley. All rights reserved 3-1 Chapter 3 Recursion: The Mirrors.
Computer Science: A Structured Programming Approach Using C1 6-9 Recursion In general, programmers use two approaches to writing repetitive algorithms.
Chapter 14: Recursion J ava P rogramming: From Problem Analysis to Program Design, From Problem Analysis to Program Design, Second Edition Second Edition.
Copyright © 2015 Pearson Education, Inc. Publishing as Pearson Addison-Wesley C H A P T E R 12 Recursion.
1 CS 132 Spring 2008 Chapter 6 Recursion Read p Skip example 6-3 (Fibonacci), 6-4 (Hanoi) Read example 6-5 (p. 387)
Data Structures and Abstractions with Java, 4e Frank Carrano
CHAPTER 02 Recursion Compiled by: Dr. Mohammad Omar Alhawarat.
Chapter 15: Advanced Topics: Introducing Data Structures and Recursion Visual Basic.NET Programming: From Problem Analysis to Program Design.
Slides prepared by Rose Williams, Binghamton University ICS201 Lecture 19 : Recursion King Fahd University of Petroleum & Minerals College of Computer.
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.
Computer Science Department Data Structure & Algorithms Lecture 8 Recursion.
Chapter 14 Recursion. Chapter Objectives Learn about recursive definitions Explore the base case and the general case of a recursive definition Learn.
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 17: Recursion.
Reading – Chapter 10. Recursion The process of solving a problem by reducing it to smaller versions of itself Example: Sierpinski’s TriangleSierpinski’s.
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.
Lecture 7 b Recursion is a fundamental programming technique that can provide an elegant solution to certain kinds of problems b Today: thinking in a recursive.
Java Programming: Guided Learning with Early Objects Chapter 11 Recursion.
Java Programming: From Problem Analysis to Program Design, 4e Chapter 13 Recursion.
Data Structures Using Java1 Chapter 5 Recursion. Data Structures Using Java2 Chapter Objectives Learn about recursive definitions Explore the base case.
© Janice Regan, CMPT 128, February CMPT 128: Introduction to Computing Science for Engineering Students Recursion.
Recursion. 2 Overview  Learn about recursive definitions  Explore the base case and the general case of a recursive definition  Discover recursive.
Chapter 15: Recursion. Objectives In this chapter, you will: – Learn about recursive definitions – Explore the base case and the general case of a recursive.
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 16: Recursion.
Chapter 17: Linked Lists. Objectives In this chapter, you will: – Learn about linked lists – Learn the basic properties of linked lists – Explore insertion.
Chapter 15: Recursion. Recursive Definitions Recursion: solving a problem by reducing it to smaller versions of itself – Provides a powerful way to solve.
Chapter 15: Recursion. Objectives In this chapter, you will: – Learn about recursive definitions – Explore the base case and the general case of a recursive.
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! =
chap10 Chapter 10 Recursion chap10 2 Recursive Function recursive function The recursive function is a kind of function that calls.
CSC 143 P 1 CSC 143 Recursion [Chapter 5]. CSC 143 P 2 Recursion  A recursive definition is one which is defined in terms of itself  Example:  Compound.
Recursion Chapter 10 Carrano, Data Structures and Abstractions with Java, Second Edition, (c) 2007 Pearson Education, Inc. All rights reserved X.
Recursion Chapter 2 Objectives Upon completion you will be able to:
1 Data Structures CSCI 132, Spring 2016 Notes 16 Tail Recursion.
Recursion CS 244 Brent M. Dingle, Ph.D. Game Design and Development Program Department of Mathematics, Statistics, and Computer Science University of Wisconsin.
Chapter 19: Recursion.
Chapter 15 Recursion.
Chapter 15 Recursion.
Recursive Thinking Chapter 9 introduces the technique of recursive programming. As you have seen, recursive programming involves spotting smaller occurrences.
Java Programming: Program Design Including Data Structures
Data Structures Using Java
Recursive Thinking Chapter 9 introduces the technique of recursive programming. As you have seen, recursive programming involves spotting smaller occurrences.
Recursion Chapter 11.
Recursion Data Structures.
C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 17: Recursion.
Java Programming: Chapter 9: Recursion Second Edition
Chapter 3 :Recursion © 2011 Pearson Addison-Wesley. All rights reserved.
Presentation transcript:

Edited by Malak Abdullah Jordan University of Science and Technology Data Structures Using C++ 2E Chapter 6 Recursion

2 Objectives Learn about recursive definitions Explore the base case and the general case of a recursive definition Learn about recursive algorithm Learn about recursive functions Explore how to use recursive functions to implement recursive

Data Structures Using C++ 2E3 Recursive Definitions Recursion –Process of solving a problem by reducing it to smaller versions of itself Example: factorial problem –5! 5 x 4 x 3 x 2 x 1 =120 –If n is a nonnegative Factorial of n (n!) defined as follows: 5! 5 * 4! 5 * 4 * 3! 5 * 4 * 3 * 2! 5 * 4 * 3 * 2 * 1 = 120

Recursive Definitions (cont’d.) Direct solution (Equation 6-1) –Right side of the equation contains no factorial notation Recursive definition –A definition in which something is defined in terms of a smaller version of itself Base case (Equation 6-1) –Case for which the solution is obtained directly General case (Equation 6-2) –Case for which the solution is obtained indirectly using recursion 4

Data Structures Using C++ 2E5 Recursive Definitions (cont’d.) Recursion insight gained from factorial problem –Every recursive definition must have one (or more) base cases –General case must eventually reduce to a base case –Base case stops recursion Recursive algorithm –Finds problem solution by reducing problem to smaller versions of itself Recursive function –Function that calls itself

Fun1(3) Print 3 Call fun2(2)... Fun2(2) Print 2 Call fun3(1)... Fun3(1) Print 1 Print $ Print & Print *

Fun(3) Print 3 Call fun(2)... Fun(2) Print 2 Call fun(1)... Fun(1) Print 1 Call fun(0)... Fun(0) Print a= 0 Print a= 1 Print a= 2 Print a= 3

Fact1(5) 5 *Fact1(4) 4 *Fact1(3) 3 *Fact1(2) 2 *Fact1(1) 1 *Fact1(0) 1 5!= 5 * ( 4 *( 3* (2 * (1)))) void main( ) { cout<< fact (5)<<endl; }

Fact1(5) 5 *Fact1(4) 4 *Fact1(3) 3 *Fact1(2) 2 *Fact1(1) 1 *Fact1(0) 1 5!= 5 * ( 4 *( 3* (2 * (1)))) void main( ) { cout<< fact (5)<<endl; }

10 Recursive Definitions (cont’d.) Recursive function implementing the factorial function FIGURE 6-1 Execution of fact(4)

Recursive Definitions (cont’d.) Recursive function notable comments –Recursive function has unlimited number of copies of itself (logically) –Every call to a recursive function has its own Code, set of parameters, local variables –After completing a particular recursive call Control goes back to calling environment (previous call) Current (recursive) call must execute completely before control goes back to the previous call Execution in previous call begins from point immediately following the recursive call Data Structures Using C++ 2E11

Data Structures Using C++ 2E12 Recursive Definitions (cont’d.) Direct and indirect recursion –Directly recursive function Calls itself –Indirectly recursive function Calls another function, eventually results in original function call Requires same analysis as direct recursion Base cases must be identified, appropriate solutions to them provided Tracing can be tedious –Tail recursive function Last statement executed: the recursive call

Fact1(5) 5Fact1(4) 4Fact1(3) 3Fact1(2) 2Fact1(1) 1Fact1(0) 1 5!= 5 * ( 4 *( 3* (2 * (1))))

Fact2(5) 5Fact2(4) 4Fact2(3) 3Fact2(2) 2Fact2(1) 1Fact2(0) 1 5!= ((((1) * 2) * 3) * 4) * 5

Indirectly RecursiveInfinite Recursion

Data Structures Using C++ 2E16 Recursive Definitions (cont’d.) Infinite recursion –Occurs if every recursive call results in another recursive call –Executes forever (in theory) –Call requirements for recursive functions System memory for local variables and formal parameters Saving information for transfer back to right caller –Finite system memory leads to Execution until system runs out of memory Abnormal termination of infinite recursive function

Data Structures Using C++ 2E17 Recursive Definitions (cont’d.) Requirements to design a recursive function –Understand problem requirements –Determine limiting conditions –Identify base cases, providing direct solution to each base case –Identify general cases, providing solution to each general case in terms of smaller versions of itself

Data Structures Using C++ 2E18 Fibonacci Number Sequence: 1, 1, 2, 3, 5, 8, 13, 21, Given first two numbers (a 1 and a 2 ) –nth number a n, n >= 3, of sequence given by: a n = a n- 1 + a n-2 Recursive function: rFibNum –Determines desired Fibonacci number –Parameters: three numbers representing first two numbers of the Fibonacci sequence and a number n, the desired nth Fibonacci number –Returns the nth Fibonacci number in the sequence

Data Structures Using C++ 2E19 Fibonacci Number (cont’d.) Third Fibonacci number –Sum of first two Fibonacci numbers Fourth Fibonacci number in a sequence –Sum of second and third Fibonacci numbers Calculating fourth Fibonacci number –Add second Fibonacci number and third Fibonacci number

If x= 1 then Fib(x)= 1 If x= 2 then Fib(x)=2 Otherwise Fib(x)= Fib(x-1) + Fib(x-2) Fib(3)= Fib(2) + Fib(1) = 3 Fib(4)= Fib(3) + Fib(2) = 5 Fib(5)= Fib(4) + Fib(3) = 8 And so on... Fib(10) =...

Data Structures Using C++ 2E21 Fibonacci Number (cont’d.) Recursive algorithm –Calculates nth Fibonacci number a denotes first Fibonacci number b denotes second Fibonacci number n denotes nth Fibonacci number

Data Structures Using C++ 2E22 Fibonacci Number (cont’d.) Recursive function implementing algorithm Trace code execution Review code on page 368 illustrating the function rFibNum

rFibNum(2,3,5) rFibNum(2,3,4) Fibonacci(1)= 2, Fibonacci(2)= 3 Fibonacci(5)=???? rFibNum(2,3,3) rFibNum(2,3,2) rFibNum(2,3,1) 3 2 rFibNum(2,3,2)rFibNum(2,3,1)

Fib(4) Fib(3) Fib(2) Fib(1) 1 Fib(0) 0 Fib(1) 1 Fib(2) Fib(1) 1 Fib(0) 0 Another example

Data Structures Using C++ 2E25 Fibonacci Number (cont’d.) FIGURE 6-7 Execution of rFibNum(2, 3, 4)

Print the number in reverse  Reverse(1357) Print 1357 % 10  7 Call reverse(135) Reverse(135) Print 135 % 10  5 Call reverse(13) Reverse(13) Print 13 % 10  3 Call reverse(1) Reverse(1) Print 1

Data Structures Using C++ 2E27 Print a Linked List in Reverse Order Function reversePrint –Given list pointer, prints list elements in reverse order Figure 6-5 example –Links in one direction –Cannot traverse backward starting from last node FIGURE 6-5 Linked list

Data Structures Using C++ 2E28 Print a Linked List in Reverse Order (cont’d.) Cannot print first node info until remainder of list printed Cannot print second node info until tail of second node printed, etc. Every time tail of a node considered –List size reduced by one –Eventually list size reduced to zero –Recursion stops

Data Structures Using C++ 2E29 Print a Linked List in Reverse Order (cont’d.) Recursive algorithm in pseudocode Recursive algorithm in C++

489 stackTop current reversePrint(nodeType * current ) { while(current != NULL) { reversePrint(current  link) cout<< current  info; } } current 984 Current  4 Current  8 Current  9 NULL

Data Structures Using C++ 2E31 Print a Linked List in Reverse Order (cont’d.) Function template to implement previous algorithm and then apply it to a list

Data Structures Using C++ 2E32 Print a Linked List in Reverse Order (cont’d.) FIGURE 6-6 Execution of the statement reversePrint(first);

Data Structures Using C++ 2E33 Print a Linked List in Reverse Order (cont’d.) The function printListReverse –Prints an ordered linked list contained in an object of the type linkedListType

Data Structures Using C++ 2E34 Recursion or Iteration? Dependent upon nature of the solution and efficiency Efficiency –Overhead of recursive function: execution time and memory usage Given speed memory of today’s computers, we can depend more on how programmer envisions solution –Use of programmer’s time –Any program that can be written recursively can also be written iteratively

35 More Examples

Data Structures Using C++ 2E36 Largest Element in an Array list : array name containing elements list[a]...list[b] stands for the array elements list[a], list[a + 1],..., list[b] list length =1 –One element (largest) list length >1 maximum(list[a], largest(list[a + 1]...list[b])) FIGURE 6-2 list with six elements

Max is 6

Largest(arr, 0, 3) 3,6, 2, 5 Max = 3 > Max ??? Largest(arr, 1, 3) 6, 2, 5 Max = 6 > Max ??? Largest(arr, 2, 3) 2, 5 Max = 2 > Max ??? Largest(arr, 3, 3)

Data Structures Using C++ 2E43 Largest Element in an Array (cont’d.) maximum(list[0], largest(list[1]...list[5])) maximum(list[1], largest(list[2]...list[5]), etc. Every time previous formula used to find largest element in a sublist –Length of sublist in next call reduced by one

Data Structures Using C++ 2E44 Largest Element in an Array (cont’d.) Recursive algorithm in pseudocode

Data Structures Using C++ 2E45 Largest Element in an Array (cont’d.) Recursive algorithm as a C++ function

Data Structures Using C++ 2E46 Largest Element in an Array (cont’d.) Trace execution of the following statement cout << largest(list, 0, 3) << endl; Review C++ program on page 362 –Determines largest element in a list FIGURE 6-3 list with four elements

Data Structures Using C++ 2E47 Largest Element in an Array (cont’d.) FIGURE 6-4 Execution of largest(list, 0, 3)

Data Structures Using C++ 2E48 Tower of Hanoi Object –Move 64 disks from first needle to third needle Rules –Only one disk can be moved at a time –Removed disk must be placed on one of the needles –A larger disk cannot be placed on top of a smaller disk FIGURE 6-8 Tower of Hanoi problem with three disks

Data Structures Using C++ 2E49 Tower of Hanoi (cont’d.) Case: first needle contains only one disk –Move disk directly from needle 1 to needle 3 Case: first needle contains only two disks –Move first disk from needle 1 to needle 2 –Move second disk from needle 1 to needle 3 –Move first disk from needle 2 to needle 3 Case: first needle contains three disks

Data Structures Using C++ 2E50 Tower of Hanoi (cont’d.) FIGURE 6-9 Solution to Tower of Hanoi problem with three disks

Data Structures Using C++ 2E51 Tower of Hanoi (cont’d.) Generalize problem to the case of 64 disks –Recursive algorithm in pseudocode

Data Structures Using C++ 2E52 Tower of Hanoi (cont’d.) Generalize problem to the case of 64 disks –Recursive algorithm in C++

Data Structures Using C++ 2E53 Tower of Hanoi (cont’d.) Analysis of Tower of Hanoi –Time necessary to move all 64 disks from needle 1 to needle 3 –Manually: roughly 5 x years Universe is about 15 billion years old (1.5 x ) –Computer: 500 years To generate 2 64 moves at the rate of 1 billion moves per second

Data Structures Using C++ 2E54 Summary Recursion –Solve problem by reducing it to smaller versions of itself Recursive algorithms implemented using recursive functions –Direct, indirect, and infinite recursion Many problems solved using recursive algorithms Choosing between recursion and iteration –Nature of solution; efficiency requirements Backtracking –Problem solving; iterative design technique