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

## Chapter 1

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 10

30. output 6 10 14

31. output 6 10 14 20

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. Recursion - Print List

39. Recursion - Print List

40. Designing Recursive Algorithms

41. Designing Recursive Algorithms

42. Designing Recursive Algorithms

43. Designing Recursive Algorithms

44. Designing Recursive Algorithms

45. Designing Recursive Algorithms

46. Designing Recursive Algorithms

More Related