1 / 78

Chapter 1

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

Télécharger la présentation

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

Presentation Transcript


  1. Chapter 1 RECURSION

  2. Chapter 1 • Subprogram implementation • Recursion • Designing Recursive Algorithms • Towers of Hanoi • Backtracking • Eight Queens problem

  3. Function implementation • Code segment (static part) • Activation record (dynamic part) • Parameters • Function result • Local variables • Return address

  4. Function implementation

  5. 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; }

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. Function implementation

  12. Function implementation

  13. 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.

  14. Recursion • An object contains itself

  15. Recursion

  16. 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.

  17. Recursion

  18. Recursion

  19. Recursion

  20. 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

  21. 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

  22. 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

  23. 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

  24. Recursion - Print List

  25. Recursion - Print List pTemp = pHead;

  26. Recursion - Print List • A list is • empty, or • consists of an element and a sublist, where sublistis a list. pHead pHead

  27. 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

  28. Recursion - Print List Create List Print(pHead)

  29. output 6

  30. output 6 10

  31. output 6 10 14

  32. output 6 10 14 20

  33. output 6 10 14 20

  34. output 6 10 14 20

  35. output 6 10 14 20

  36. output 6 10 14 20

  37. output 6 10 14 20

  38. output 6 10 14 20

  39. Recursion - Print List

  40. Recursion - Print List

  41. Designing Recursive Algorithms

  42. Designing Recursive Algorithms

  43. Designing Recursive Algorithms

  44. Designing Recursive Algorithms

  45. Designing Recursive Algorithms

  46. Designing Recursive Algorithms

  47. Designing Recursive Algorithms

More Related