Recursion
This presentation is the property of its rightful owner.
Sponsored Links
1 / 14

Recursion PowerPoint PPT Presentation


  • 78 Views
  • Uploaded on
  • Presentation posted in: General

Programming. Recursion. Recursion: Example 0. What does the following program do? #include <iostream> using namespace std; int fac(int n){ // Assume n >= 0 int product; if(n <= 1) return 1; product = n * fac(n-1); return product; } void main(){// driver function int number;

Download Presentation

Recursion

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Recursion

Programming

Recursion


Recursion example 0

Recursion: Example 0

  • What does the following program do?

    #include <iostream>

    using namespace std;

    int fac(int n){

    // Assume n >= 0

    int product;

    if(n <= 1)

    return 1;

    product = n * fac(n-1);

    return product;

    }

    void main(){// driver function

    int number;

    do{

    cout << "Enter integer (negative to stop): ";

    cin >> number;

    if(number >= 0)

    cout << fac(number) << endl;

    }while(number >= 0);

    }


Recursion example 01

Recursion: Example 0

  • Assume the number typed is 3.

    fac(3) :

    3 <= 1 ? No.

    product3 = 3 * fac(2)

    fac(2) :

    2 <= 1 ? No.

    product2 = 2 * fac(1)

    fac(1) :

    1 <= 1 ? Yes.

    return 1

    product2 = 2 * 1 = 2

    return product2

    product3 = 3 * 2 = 6

    return product3

    fac(3)has the value 6


Recursion1

Recursion

  • 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) * (n-2) * ... * 1

    or

    n! = n * (n-1)! and 1! = 1


Recursion2

Recursion

  • A recursive solution may be simpler to write (once you get used to the idea) than a non-recursive solution.

  • But a recursive solution may not be as efficient as a non-recursive solution of the same problem.


Iterative factorial

Iterative Factorial

// Non-recursive factorial function

// Compute the factorial using a loop

int fac(int n){

// Assume n >= 0

int k, product;

if(n <=1)

return 1;

product = 1;

for(k=1; k<=n; k++)

product*= k;

return product;

}


Other recursive applications

Other Recursive Applications

  • Fibonacci numbers:

    0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

    where each number is the sum of the preceding two.

  • Recursive definition:

    • F(0) = 0

    • F(1) = 1

    • F(n) = F(n-1) + F(n-2)


Other recursive applications1

Other Recursive Applications

  • Binary search:

    • Compare search element with middle element of the array:

    • If not equal, then apply binary search to half of the array (if not empty) where the search element would be.


Recursion general form

Recursion General Form

  • How to write recursively?

    int rec(1-2 parameters){

    if(stopping condition)

    return stopping value;

    // second stopping condition if needed

    return value/rec(revised parameters)

    +-*/ rec(revised parameters);

    }


Recursion example 1

Recursion: Example 1

  • How to write exp(int x, int y) recursively?

    int exp(int x, int y){

    if(y==0)

    return 1;

    return x * exp(x, y-1);

    }


Recursion example 2

Recursion: Example 2

  • Write a recursive function that takes a double array and its size as input and returns the sum of the array:

    double asum(int a[], int size){

    if(size==0)

    return 0;

    return asum(a, size-1)+a[size-1];

    }


Recursion example 3

Recursion: Example 3

  • Write a recursive function that takes a double array and its size as input and returns the product of the array:

    double aprod(int a[], int size){

    if(size==0)

    return 1;

    return aprod(a, size-1)*a[size-1];

    }


Recursion example 4

Recursion: Example 4

  • Write a recursive function that counts the number of zero digits in a non-negative integer

  • zeros(10200) returns 3

    int zeros(int n){

    if(n==0)

    return 1;

    if(n < 10)

    return 0;

    if(n%10 == 0)

    return 1 + zeros(n/10);

    else

    return zeros(n/10);

    }


Recursion example 5

Recursion: Example 5

  • Write a recursive function to determine how many factors m are part of n. For example, if n=48 and m=4, then the result is 2 (48=4*4*3).

    int factors(int n, int m){

    if(n%m != 0)

    return 0;

    return 1 + factors(n/m, m);

    }


  • Login