1 / 14

Recursion

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;

overton
Télécharger la présentation

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

  2. 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); }

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

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

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

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

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

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

  9. 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); }

  10. 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); }

  11. 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]; }

  12. 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]; }

  13. 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); }

  14. 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); }

More Related