1 / 78

790 likes | 889 Views

Chapter 1. RECURSION. Chapter 1. Subprogram implementation Recursion Designing Recursive Algorithms Towers of Hanoi Backtracking Eight Queens problem. Function implementation. Code segment (static part) Activation record (dynamic part) Parameters Function result Local variables

Download Presentation
## Chapter 1

**An Image/Link below is provided (as is) to download presentation**
Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.
Content is provided to you AS IS for your information and personal use only.
Download presentation by click this link.
While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.
During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

**Chapter 1**RECURSION**Chapter 1**• Subprogram implementation • Recursion • Designing Recursive Algorithms • Towers of Hanoi • Backtracking • Eight Queens problem**Function implementation**• Code segment (static part) • Activation record (dynamic part) • Parameters • Function result • Local variables • Return address**Function implementation**#include <iostream.h> int maximum( int x, int y, int z) { int max = x; if ( y > max ) max = y; if ( z > max ) max = z; return max; } int main() { int a, b, c, d1, d2; A1 cout << "Enter three integers: "; A2 cin >> a >> b >> c; A3 d1 = maximum (a, b, c); A4 cout << "Maximum is: " << d1 << endl; A5 d2 = maximum (7, 9, 8); A5 cout << "Maximum is: " << d2 << endl; A7 return 0; }**Function implementation**d1 = maximum (a, b, c); // a = 7; b = 9; c = 8 A4 Return Address Return value int maximum( int x, int y, int z) { int max = x; if ( y > max ) max = y; if ( z > max ) max = z; return max; } 7 x 9 y 8 z max**Function implementation**d1 = maximum (a, b, c); // a = 7; b = 9; c = 8 A4 Return Address Return value int maximum( int x, int y, int z) { int max = x; if ( y > max ) max = y; if ( z > max ) max = z; return max; } 7 x 9 y 8 z 7 max**Function implementation**d1 = maximum (a, b, c); // a = 7; b = 9; c = 8 A4 Return Address Return value int maximum( int x, int y, int z) { int max = x; if ( y > max ) max = y; if ( z > max ) max = z; return max; } 7 x 9 y 8 z 9 max**Function implementation**d1 = maximum (a, b, c); // a = 7; b = 9; c = 8 A4 Return Address Return value int maximum( int x, int y, int z) { int max = x; if ( y > max ) max = y; if ( z > max ) max = z; return max; } 7 x 9 y 8 z 9 max**Function implementation**d1 = maximum (a, b, c); // a = 7; b = 9; c = 8 A4 Return Address 9 Return value int maximum( int x, int y, int z) { int max = x; if ( y > max ) max = y; if ( z > max ) max = z; return max; } 7 x 9 y 8 z 9 max**Function implementation**• Stack frames: • Each vertical column shows the contents of the stack at a given time • There is no difference between two cases: • when the temporary storage areas pushed on the stack come from different functions, and • when the temporary storage areas pushed on the stack come from repeated occurrences of the same function.**Recursion**• An object contains itself**Recursion**• Recursion is the name for the case when: • A function invokes itself, or • A function invokes a sequence of other functions, one of which eventually invokes the first function again. • In regard to stack frames for function calls, recursion is no different from any other function call. • Stack frames illustrate the storage requirements for recursion. • Separate copies of the variables declared in the function are created for each recursive call.**Recursion**• In C++, it’s possible for a function to call itself. Functions that do so are called seft-referential or recursive functions. • In some problems, it may be natural to define the problem in terms of the problem itself. • Recursion is useful for problems that can be represented by a simpler version of the same problem. • Example: Factorial 1! = 1; 2! = 2*1 = 2*1! • 3! = 3*2*1=3*2! • …. n! = n*(n-1)! The factorial function is only defined for positive integers. n!=1 if n is equal to 1 n!=n*(n-1)! if n >1**Example :**#include <iostream.h> #include <iomanip.h> unsigned long Factorial( unsigned long ); int main(){ for ( int i = 0; i <= 10; i++ ) cout << setw( 2 ) << i << "! = " << Factorial( i ) << endl; return 0; } // Recursive definition of function factorial unsigned long Factorial( unsigned long number ){ if (number < 1) // base case return 1; else // recursive case return number * Factorial( number - 1 ); } The output : 0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320 9! = 362880 10! = 3628800**Factorial(3)**unsigned long Factorial( unsigned long number ){ A1 if (number < 1) // base case A2 return 1; A3 else // recursive case A4 return number * Factorial( number - 1 ); A5} A4 0 1 A4 A4 A4 1 1 1 1 1 A4 A4 A4 A4 A4 2 2 2 2 2 2 A0 A0 A0 A0 A0 A0 A0 3 3 3 3 3 3 3 6**Recursion**We must always make sure that the recursion bottoms out: • A recursive function must contain at least one non-recursive branch. • The recursive calls must eventually lead to a non-recursive branch. • Recursion is one way to decompose a task into smaller subtasks. • At least one of the subtasks is a smaller example of the same task. • The smallest example of the same task has a non-recursive solution. Example: The factorial function n! = n * (n-1)! and 1! = 1**Recursion - Print List**pTemp = pHead;**Recursion - Print List**• A list is • empty, or • consists of an element and a sublist, where sublistis a list. pHead pHead**Recursion - Print List**Algorithm Print(val head<pointer>) Prints Singly Linked List. Pre headpoints to the first element of the list needs to be printed. Post Elements in the list have been printed. Uses recursive function Print. A1.if(head= NULL) // stopping case A1.1.return A2.write (head->data) A3.Print(head->link) // recursive case A4.End Print**Recursion - Print List**Create List Print(pHead)**output**6**output**6 10**output**6 10 14**output**6 10 14 20**output**6 10 14 20**output**6 10 14 20**output**6 10 14 20**output**6 10 14 20**output**6 10 14 20**output**6 10 14 20

More Related