Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of...

23
Recursive

Transcript of Recursive. 2 Recursive Definitions In a recursive definition, an object is defined in terms of...

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