recursion
Download
Skip this Video
Download Presentation
Recursion

Loading in 2 Seconds...

play fullscreen
1 / 14

Recursion - PowerPoint PPT Presentation


  • 122 Views
  • Uploaded on

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;

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Recursion' - overton


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);

}

ad