Download Recursion

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Simple
Recursion
COMP104 Lecture 35 / Slide 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;
while(true){
cout << "Enter integer (negative to stop): ";
cin >> number;
if(number < 0)
break;
cout << fac(number) << endl;
}
}
COMP104 Lecture 35 / Slide 3
Recursion: Example 0

Assume the number typed is 3.
fac(3) :
3 <= 1 ?
product3 = 3 * fac(2)
fac(2) :
2 <= 1 ?
product2 = 2 * fac(1)
fac(1) :
1 <= 1 ?
return 1
product2 = 2 * 1 = 2
return product2
product3 = 3 * 2 = 6
return product3
fac(3) has the value 6
No.
No.
Yes.
COMP104 Lecture 35 / Slide 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
COMP104 Lecture 35 / Slide 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.
COMP104 Lecture 35 / Slide 6
Writing Recursive Function
 A recursive
function always consists of two
parts:

basis case (stopping criterion)
e.g.

inductive case
e.g.
 It
F(n) = 1 when n = 1
F(n) = n * F(n-1)
has the same mathematical meaning as
induction
COMP104 Lecture 35 / Slide 7
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;
}
COMP104 Lecture 35 / Slide 8
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)
COMP104 Lecture 35 / Slide 9
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.
COMP104 Lecture 35 / Slide 10
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);
}
COMP104 Lecture 35 / Slide 11
Recursion: Example 1
to write exp(int x, int y)
recursively?
How
int exp(int x, int y){
if(y==0)
return 1;
return x * exp(x, y-1);
}
COMP104 Lecture 35 / Slide 12
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];
}
COMP104 Lecture 35 / Slide 13
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];
}
COMP104 Lecture 35 / Slide 14
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);
}
COMP104 Lecture 35 / Slide 15
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);
}
Related documents