recursive. 2 recursive definitions in a recursive definition, an object is defined in terms of...

23
Recursive

Upload: hugo-harrell

Post on 16-Jan-2016

242 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

Recursive

Page 2: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

2

Recursive Definitions

•In a recursive definition, an object is defined in terms of itself.

•We can recursively define sequences, functions and sets.

Page 3: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

3

Recursively Defined Sequences•Example:

The sequence {an} of powers of 2 is given byan = 2n for n = 0, 1, 2, … .

•The same sequence can also be defined recursively:

a0 = 1

an+1 = 2an for n = 0, 1, 2, …

Page 4: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

4

Recursively Defined Functions

We can use the following method to define a function with the natural numbers as its domain:

1. Specify the value of the function at zero.

2. Give a rule for finding its value at any integer from its values at smaller integers.

Page 5: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

5

Constructing Recursion

o To construct a recursive algorithm you have to

find out:

1.Recursive step

2.Base step

Page 6: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

6

Recursively Defined Functions•Example:

f(0) = 3

f(n + 1) = 2f(n) + 3

•f(0) = 3•f(1) = 2f(0) + 3 = 23 + 3 = 9•f(2) = 2f(1) + 3 = 29 + 3 = 21•f(3) = 2f(2) + 3 = 221 + 3 = 45•f(4) = 2f(3) + 3 = 245 + 3 = 93

Page 7: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

Example : Give an inductive definition of the factorial

function F(n) = n!, Then compute F(5).

Solution:

(1) Specify the initial value of factorial function: F(0)=1.

(2) Rule for finding F(n + 1) from F(n):

F(n+1) = (n + 1) F(n)

F(5) = 5 • F(4)

=5 • 4 • F(3)

=5 • 4 • 3 • F(2)

=5 • 4 • 3 • 2 • F(1)

=5 • 4 • 3 • 2 • 1 • F(0)

= 5 • 4 • 3 • 2 • 1 • 1=120

Page 8: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

8

Recursively Defined Functions•A famous example: The Fibonacci numbers

f(0) = 0, f(1) = 1f(n) = f(n – 1) + f(n - 2)

•f(0) = 0•f(1) = 1•f(2) = f(1) + f(0) = 1 + 0 = 1•f(3) = f(2) + f(1) = 1 + 1 = 2•f(4) = f(3) + f(2) = 2 + 1 = 3•f(5) = f(4) + f(3) = 3 + 2 = 5•f(6) = f(5) + f(4) = 5 + 3 = 8

Page 9: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

9

Recursive Algorithms

Example II: Recursive Fibonacci Algorithm

procedure fibo(n: nonnegative integer)

if n = 0 then fibo(0) := 0

else if n = 1 then fibo(1) := 1

else fibo(n) := fibo(n – 1) + fibo(n – 2)

n 0 1 2 3 4 5 6 7 8 9 10 11

Fib(n) 0 1 1 2 3 5 8 13 21 34 55 89

Page 10: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

10

Recursive Algorithms

•Recursive Fibonacci Evaluation:

f(4)

f(3)

f(2)

f(1) f(0)

f(1)

f(2)

f(1) f(0)

Page 11: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

11

General Algorithm

if (stopping condition) then

solve simple problem (base)

else

use recursion to solve smaller problem

combine solutions from smaller problem

Page 12: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

12

Convert from decimal to binaryThis method converts an integer number to its binary equivalent.

Base step: dec2bin(n) = n if n is 0 or 1

Recursive step: dec2bin(n) = dec2bin (n/2) , (n mod 2)

Algorithm dec2bin(n):

If n < 2 Print nelse dec2bin(n / 2) Print n mod 2

Page 13: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

Example (Convert from decimal to binary)

n=12• dec2bin(12) = dec2bin (6) print (12 mod 2) 0• dec2bin(6) = dec2bin (3) , print (6mod 2) 0• dec2bin(3) = dec2bin (3/2) , print (3 mod 2) 1• dec2bin(3/2) = 1

1 1 0 0

13

Page 14: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

Example (Convert from decimal to binary)

n=17• dec2bin(17) = dec2bin (17/2) print (17 mod 2) 1• dec2bin(8) = dec2bin (8/2) , print (8 mod 2) 0• dec2bin(4) = dec2bin (4/2) , print (4 mod 2) 0• dec2bin(2) = dec2bin (2/2) , print (2 mod 2) 0• Dec2bin(1) = 1

1 0 0 0 1

14

Page 15: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

Example (Convert from decimal to binary)

n=90• Dec2bin(90) = dec2bin (90/2) print (90 mod 2) 0• dec2bin(45) = dec2bin (45/2) print (45 mod 2) 1• dec2bin(22) = dec2bin (22/2) print (22 mod 2) 0• dec2bin(11) = dec2bin (11/2) print (11 mod 2) 1• dec2bin(5) = dec2bin (5/2) print (5 mod 2) 1• dec2bin(2) = dec2bin (2/2) , print (2 mod 2) 0• Dec2bin(1) = 1

1 0 1 1 0 115

Page 16: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

16

class Method { public static void dec2bin( int n){

if ( n < 2 ) System.out.print( n );

else { dec2bin( n / 2 ); System.out.print( n % 2 ); } }}class Dec2Bin{

public static void main(String [] arg){ int i=10;

dec2bin(i);}

}

Output:1010

Page 17: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

17

Example : The Sum of the First N Positive Integers

• Definition:sum(n) = n + (n-1) + (n-2) + … + 1 for any integer n > 0

• Recursive relation;sum(n) = n + [(n-1) + (n-2) + … + 1]

= n + sum(n-1)Looks so nice, but how about n == 1?sum(1) = 1 + sum(0), but the argument to sum( ) must be positive

• Final recursive definition:sum(n) = 1 if n = 1 (Base case)

= n + sum(n-1) if n > 1 (Recursive call)

Page 18: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

18

Recursive Definition of sum(n)int sum(int n){ if (n == 1) return 1; else return n + sum(n-1);}

n = 3

sum(n-1)? =

return?

Page 19: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

19

Box trace of sum(3)

n = 3A: sum(n-1)?=

return?

n = 2A: sum(n-1)?=

return?

n = 1

return 1

n = 3A: sum(n-1)? =

return?

n = 2A: sum(n-1)?=return?

n = 1

return 1

Each box corresponds to a function’s activation record or stack.

cout << sum(3);

1

33

6

Basic Recursions

Page 20: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

Home Work

Give a recursive algorithm for computing the greatest common divisor of two nonnegative integers a and b with a < b.

Page 21: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

21

Computing GCD of A and B

• Basis for recursionGCD (a, 0) = a (base case)

GCD (a, b) = GCD (b, a mod b) (recursion)

• Recursive methodGcd(a , b)

{

if (b != 0)

return gcd(b, a % b); // recursion

return a; // base case

}

Page 22: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

Computing GCD of 33 and 55

GCD (a, 0) = a (base case)

GCD (a, b) = GCD (b, a mod b) (recursion)

• GCD (33,55) = GCD (55 , 33%55) = GCD (55 , 33)

• GCD (55,33) = GCD (33, 55%33) = GCD (33 , 22)

• GCD (22,33) = GCD (22, 33%22) = GCD (22 , 11)

• GCD (11,22) = GCD (11, 22%11) = GCD (11 , 0)

• GCD (11 , 0) = 11

• GCD(33,55) = 11

Page 23: Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of itself. We can recursively define sequences, functions

Trace of recursive method: gcd

gcd(33,55)

gcd(55,33)

gcd(33,22)

gcd(22,11)

gcd(11,0)

return 11

return 11

return 11

return 11

return 11

Callerint x = gcd(33,55);

call

call

call

call

call