Recursion Visit: tshahab.blogspot.com
Recursion  Basic problem solving technique is to divide a problem into smaller subproblems  These subproblems may also be divided into smaller subproblems  When the subproblems are small enough to solve directly the process stops  A recursive algorithm is a problem solution that has been expressed in terms of two or more easier to solve subproblems
What is recursion?  A procedure that is defined in terms of itself  In a computer language a function that calls itself
Recursion Recursion A recursive definition is one which is defined in terms of itself. Examples: • A phrase is a "palindrome" if the 1st and last letters are the same, and what's inside is itself a palindrome (or empty or a single letter) • Rotor • Rotator • 12344321
N = 1 is a natural number if n is a natural number, then n+1 is a natural number • The definition of the natural numbers: Recursion Recursion
1. Recursive data structure: A data structure that is partially composed of smaller or simpler instances of the same data structure. For instance, a tree is composed of smaller trees (subtrees) and leaf nodes, and a list may have other lists as elements. a data structure may contain a pointer to a variable of the same type: struct Node { int data; Node *next; }; 2. Recursive procedure: a procedure that invokes itself 3. Recursive definitions: if A and B are postfix expressions, then A B + is a postfix expression. Recursion in Computer Science Recursion in Computer Science
Recursive Data Structures Recursive Data Structures Linked lists and trees are recursive data structures: struct Node { int data; Node *next; }; struct TreeNode { int data; TreeNode *left; TreeNode * right; }; Recursive data structures suggest recursive algorithms.
A mathematical look  We are familiar with f(x) = 3x+5  How about f(x) = 3x+5 if x > 10 or f(x) = f(x+2) -3 otherwise
Calculate f(5) f(x) = 3x+5 if x > 10 or f(x) = f(x+2) -3 otherwise  f(5) = f(7)-3  f(7) = f(9)-3  f(9) = f(11)-3  f(11) = 3(11)+5 = 38 But we have not determined what f(5) is yet!
Calculate f(5) f(x) = 3x+5 if x > 10 or f(x) = f(x+2) -3 otherwise  f(5) = f(7)-3 = 29  f(7) = f(9)-3 = 32  f(9) = f(11)-3 = 35  f(11) = 3(11)+5 = 38 Working backwards we see that f(5)=29
Series of calls f(5) f(7) f(9) f(11)
Recursion occurs when a function/procedure calls itself. Many algorithms can be best described in terms of recursion. Example: Factorial function The product of the positive integers from 1 to n inclusive is called "n factorial", usually denoted by n!: n! = 1 * 2 * 3 .... (n-2) * (n-1) * n Recursion Recursion
Recursive Definition Recursive Definition of the Factorial Function n! = 1, if n = 0 n * (n-1)! if n > 0 5! = 5 * 4! 4! = 4 * 3! 3! = 3 * 2! 2! = 2 * 1! 1! = 1 * 0! = 5 * 24 = 120 = 4 * 3! = 4 * 6 = 24 = 3 * 2! = 3 * 2 = 6 = 2 * 1! = 2 * 1 = 2 = 1 * 0! = 1
The Fibonacci numbers are a series of numbers as follows: fib(1) = 1 fib(2) = 1 fib(3) = 2 fib(4) = 3 fib(5) = 5 ... fib(n) = 1, n <= 2 fib(n-1) + fib(n-2), n > 2 Recursive Definition Recursive Definition of the Fibonacci Numbers fib(3) = 1 + 1 = 2 fib(4) = 2 + 1 = 3 fib(5) = 2 + 3 = 5
int BadFactorial(n){ int x = BadFactorial(n-1); if (n == 1) return 1; else return n*x; } What is the value of BadFactorial(2)? Recursive Definition Recursive Definition We must make sure that recursion eventually stops, otherwise it runs forever:
Using Recursion Properly Using Recursion Properly For correct recursion we need two parts: 1. One (ore more) base cases that are not recursive, i.e. we can directly give a solution: if (n==1) return 1; 2. One (or more) recursive cases that operate on smaller problems that get closer to the base case(s) return n * factorial(n-1); The base case(s) should always be checked before the recursive calls.
Example 1  Write two recursive functions to display numbers from 1 to n (a positive integer) in both ascending and descending order void displayAscending(int n) { if (n==1) { cout<<n<<“,”; return; } displayAscending(n-1); cout<<n<<“,”; } 17
void displayDescending (int n) { cout<<n<<“,”; if (n==1) return; displayDescending( n-1); } void main(void) { int num = 15; displayDescending(num); cout<<endl; displayAscending(num); } 18
Example 2  Write a recursive function which adds first n positive integers int add_n_integers(int n) { if (n==1) return 1; else return n + add_n_integers(n-1); } void main(void) { int num = 4; cout<<“sum of first “<<num <<“ positive integers is: “ <<add_n_integers(num); } 19
Counting Digits  Recursive definition digits(n) = 1 if (–9 <= n <= 9) 1 + digits(n/10) otherwise  Example digits(321) = 1 + digits(321/10) = 1 +digits(32) = 1 + [1 + digits(32/10)] = 1 + [1 + digits(3)] = 1 + [1 + (1)] = 3
Counting Digits in C++ int numberofDigits(int n) { if ((-10 < n) && (n < 10)) return 1 else return 1 + numberofDigits(n/10); }
Evaluating Exponents Recurisivley int power(int k, int n) { // raise k to the power n if (n == 0) return 1; else return k * power(k, n – 1); }

Lec-6 Recursion of Data Structures & Algorithms

  • 1.
  • 2.
    Recursion  Basic problemsolving technique is to divide a problem into smaller subproblems  These subproblems may also be divided into smaller subproblems  When the subproblems are small enough to solve directly the process stops  A recursive algorithm is a problem solution that has been expressed in terms of two or more easier to solve subproblems
  • 3.
    What is recursion? A procedure that is defined in terms of itself  In a computer language a function that calls itself
  • 4.
    Recursion Recursion A recursive definitionis one which is defined in terms of itself. Examples: • A phrase is a "palindrome" if the 1st and last letters are the same, and what's inside is itself a palindrome (or empty or a single letter) • Rotor • Rotator • 12344321
  • 5.
    N = 1 isa natural number if n is a natural number, then n+1 is a natural number • The definition of the natural numbers: Recursion Recursion
  • 6.
    1. Recursive datastructure: A data structure that is partially composed of smaller or simpler instances of the same data structure. For instance, a tree is composed of smaller trees (subtrees) and leaf nodes, and a list may have other lists as elements. a data structure may contain a pointer to a variable of the same type: struct Node { int data; Node *next; }; 2. Recursive procedure: a procedure that invokes itself 3. Recursive definitions: if A and B are postfix expressions, then A B + is a postfix expression. Recursion in Computer Science Recursion in Computer Science
  • 7.
    Recursive Data Structures RecursiveData Structures Linked lists and trees are recursive data structures: struct Node { int data; Node *next; }; struct TreeNode { int data; TreeNode *left; TreeNode * right; }; Recursive data structures suggest recursive algorithms.
  • 8.
    A mathematical look We are familiar with f(x) = 3x+5  How about f(x) = 3x+5 if x > 10 or f(x) = f(x+2) -3 otherwise
  • 9.
    Calculate f(5) f(x) =3x+5 if x > 10 or f(x) = f(x+2) -3 otherwise  f(5) = f(7)-3  f(7) = f(9)-3  f(9) = f(11)-3  f(11) = 3(11)+5 = 38 But we have not determined what f(5) is yet!
  • 10.
    Calculate f(5) f(x) =3x+5 if x > 10 or f(x) = f(x+2) -3 otherwise  f(5) = f(7)-3 = 29  f(7) = f(9)-3 = 32  f(9) = f(11)-3 = 35  f(11) = 3(11)+5 = 38 Working backwards we see that f(5)=29
  • 11.
  • 12.
    Recursion occurs whena function/procedure calls itself. Many algorithms can be best described in terms of recursion. Example: Factorial function The product of the positive integers from 1 to n inclusive is called "n factorial", usually denoted by n!: n! = 1 * 2 * 3 .... (n-2) * (n-1) * n Recursion Recursion
  • 13.
    Recursive Definition Recursive Definition ofthe Factorial Function n! = 1, if n = 0 n * (n-1)! if n > 0 5! = 5 * 4! 4! = 4 * 3! 3! = 3 * 2! 2! = 2 * 1! 1! = 1 * 0! = 5 * 24 = 120 = 4 * 3! = 4 * 6 = 24 = 3 * 2! = 3 * 2 = 6 = 2 * 1! = 2 * 1 = 2 = 1 * 0! = 1
  • 14.
    The Fibonacci numbersare a series of numbers as follows: fib(1) = 1 fib(2) = 1 fib(3) = 2 fib(4) = 3 fib(5) = 5 ... fib(n) = 1, n <= 2 fib(n-1) + fib(n-2), n > 2 Recursive Definition Recursive Definition of the Fibonacci Numbers fib(3) = 1 + 1 = 2 fib(4) = 2 + 1 = 3 fib(5) = 2 + 3 = 5
  • 15.
    int BadFactorial(n){ int x= BadFactorial(n-1); if (n == 1) return 1; else return n*x; } What is the value of BadFactorial(2)? Recursive Definition Recursive Definition We must make sure that recursion eventually stops, otherwise it runs forever:
  • 16.
    Using Recursion Properly UsingRecursion Properly For correct recursion we need two parts: 1. One (ore more) base cases that are not recursive, i.e. we can directly give a solution: if (n==1) return 1; 2. One (or more) recursive cases that operate on smaller problems that get closer to the base case(s) return n * factorial(n-1); The base case(s) should always be checked before the recursive calls.
  • 17.
    Example 1  Writetwo recursive functions to display numbers from 1 to n (a positive integer) in both ascending and descending order void displayAscending(int n) { if (n==1) { cout<<n<<“,”; return; } displayAscending(n-1); cout<<n<<“,”; } 17
  • 18.
    void displayDescending (intn) { cout<<n<<“,”; if (n==1) return; displayDescending( n-1); } void main(void) { int num = 15; displayDescending(num); cout<<endl; displayAscending(num); } 18
  • 19.
    Example 2  Writea recursive function which adds first n positive integers int add_n_integers(int n) { if (n==1) return 1; else return n + add_n_integers(n-1); } void main(void) { int num = 4; cout<<“sum of first “<<num <<“ positive integers is: “ <<add_n_integers(num); } 19
  • 20.
    Counting Digits  Recursivedefinition digits(n) = 1 if (–9 <= n <= 9) 1 + digits(n/10) otherwise  Example digits(321) = 1 + digits(321/10) = 1 +digits(32) = 1 + [1 + digits(32/10)] = 1 + [1 + digits(3)] = 1 + [1 + (1)] = 3
  • 21.
    Counting Digits inC++ int numberofDigits(int n) { if ((-10 < n) && (n < 10)) return 1 else return 1 + numberofDigits(n/10); }
  • 22.
    Evaluating Exponents Recurisivley int power(intk, int n) { // raise k to the power n if (n == 0) return 1; else return k * power(k, n – 1); }

Editor's Notes

  • #1 Visit: tshahab.blogspot.com
  • #4 Visit: tshahab.blogspot.com
  • #10 Visit: tshahab.blogspot.com