25
RECURSION (TEXTBOOK: §4.3, §4.4) Gongjun Yan 2008/10/29 1

Recursion

  • Upload
    gbland

  • View
    529

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Recursion

RECURSION

(TEXTBOOK: §4.3, §4.4)

Gongjun Yan

2008/10/29

1

Page 2: Recursion

§4.3: Recursive Definitions

A recursive definition of a set always consists of

three distinct clauses:

The basis clause (or simply basis) establishes that

certain objects are in the set.

The inductive clause (or simply induction) establishes the

ways in which elements of the set can be combined to

produce new elements of the set.

The extremal clause asserts that unless an object

satisfying basis clause and inductive clause, the

object is not a member of the set.

2008/10/29

2

Page 3: Recursion

Example 1

Examples of Recursive Definition of Set

Example 1. Definition of the Set of Natural

Numbers

The set N is the set that satisfies the following three

clauses:

Basis Clause: 0 N

Inductive Clause: For any element x in N, x + 1 is

in N.

Extremal Clause: Nothing is in N unless it is

obtained from the Basis and Inductive Clauses. 29 October 2008Set Theory

3

Page 4: Recursion

Example 2

Example 2. Definition of the Set of Even Integers

The set EI is the set that satisfies the following three

clauses:

Basis Clause: 0 EI

Inductive Clause: For any element x in EI, x + 2,

and x - 2 are in EI.

Extremal Clause: Nothing is in EI unless it is

obtained from the Basis and Inductive Clauses.

29 October 2008

4

Page 5: Recursion

Tips

Tips for recursively defining a set:

For the "Basis Clause", try simplest elements in the

set such as smallest numbers (0, or 1), simplest

expressions, or shortest strings. Then see how other

elements can be obtained from them, and

generalize that generation process for the "Inductive

Clause".

Game Time

29 October 2008

5

Page 6: Recursion

generalized union

29 October 2008Set Theory

6

Page 7: Recursion

Recursive Definition of Function

Some functions can also be defined recursively.

Condition: The domain of the function you wish to

define recursively must be a set defined recursively.

How to define function recursively:

First the values of the function for the basis elements of

the domain are specified.

Then the value of the function at an element, say x, of

the domain is defined using its value at the parent(s) of

the element x.

29 October 2008

7

Page 8: Recursion

Example

Example 3: The function f(n) = n! for natural

numbers n can be defined recursively as follows:

Basis Clause: f(0) = 0! = 1

Inductive Clause: For all natural number n, f(n+1) =

(n+1) f(n).

Using this definition, 3! can be found as follows:

Since 0 ! = 1, 1 ! = 1 * 0 ! = 1 * 1 = 1 ,

Hence 2 ! = 2 * 1 ! = 2 * 1 = 2 .

Hence 3 ! = 3 * 2 ! = 3 * 2 * 1 = 6 .

29 October 2008

8

Page 9: Recursion

Extremal Clause

Note that here Extremal Clause is not necessary

because the set of natural numbers can be defined

recursively

that has the extremal clause in it.

So there is no chance of other elements to come into

the function being defined.

29 October 2008

9

Page 10: Recursion

Examples

Example 4: The function f(n) = 2n for natural

numbers n can be defined recursively as follows:

Basis Clause: f(0) = 1

Inductive Clause: For all natural number n, f(n+1)

= 2 f(n) .

Example 5: The function f(n) = 2n + 1 for natural

numbers n can be defined recursively as follows:

Basis Clause: f(0) = 1

Inductive Clause: For all natural number n, f(n+1) =

f(n) + 2 .

29 October 2008

10

Page 11: Recursion

More examples

Example 6: The function L from the set S of strings

over {a, b} to the set of natural numbers that gives

the length of a string can be defined recursively as

follows:

Basis Clause: For symbols a and b of the

alphabet, L(a) = 1 and L(b) = 1.

Inductive Clause: For any string x and y of S, L(xy)

= L(x) + L(y) , where xy is the concatenation of

strings x and y.

29 October 2008

11

Page 12: Recursion

The Fibonacci Series

The Fibonacci series fn≥0 is a famous series defined

by:

f0 :≡ 0, f1 :≡ 1, fn≥2 :≡ fn−1 + fn−2

2008/10/29

12

0

1 1

2 3

5 8

13

Page 13: Recursion

Tree Structures --- Rooted Trees

The set of rooted trees

Root

edges connecting these vertices

can be defined recursively by these steps:

BASIS STEP: A single vertex r is a rooted tree.

RECURSIVE STEP: Suppose that T1,T2,…,Tn are disjoint rooted

trees with roots r1,r2,…,rn respectively. Then the graph formed by

starting with a root r, which is not in any of the rooted trees

T1,T2,…,Tn, and adding an edge from r to each of the vertices

r1,r2,…,rn is also a rooted tree.

2008/10/29

13

Page 14: Recursion

Examples of Rooted Trees

2008/10/29

14

Page 15: Recursion

Tree Structures --- Binary Trees

The set of extended binary trees can be defined

recursively by these steps:

BASIS STEP: A empty set is an extended binary tree.

RECURSIVE STEP: If T1 and T2 are disjoint extended

binary trees, there is an extended binary tree, denoted

by T1T2, containing of a root r together with edges

connecting the root to each of the roots of the left

subtree T1 and the right subtree T2 when these trees

are nonempty.

2008/10/29

15

Page 16: Recursion

Example of Extended Binary Trees

2008/10/29

16

Page 17: Recursion

Recursive Algorithms (§4.4)

Recursive definitions can be used to describe

algorithms as well as functions and sets.

Example: A procedure to compute an.

procedure power(a≠0: real, nN)

if n = 0 then

return 1

else

return a · power(a, n−1)

2008/10/29

17

Page 18: Recursion

Efficiency of Recursive Algorithms

The time complexity of a recursive algorithm may

depend critically on the number of recursive calls it

makes.

Example: Modular exponentiation to a power n can

take log(n) time if done right, but linear time if

done slightly differently.

Task: Compute bn mod m, where

m≥2, n≥0, and 1≤b<m.

2008/10/29

18

Page 19: Recursion

Modular Exponentiation

Alg. #1

Uses the fact that bn = b·bn−1 and that x·y mod m = x·(y mod m) mod m.(Prove the latter theorem at home.)

procedure mpower(b≥1,n≥0,m>b N)

{Returns bn mod m.}if n=0 then return 1 elsereturn (b·mpower(b,n−1,m)) mod m

Note this algorithm takes Θ(n) steps!

2008/10/29

19

Page 20: Recursion

Modular Exponentiation

Alg. #2

Uses the fact that b2k = bk·2 = (bk)2.

procedure mpower(b,n,m) {same signature}

if n=0 then return 1

else if 2|n then

return mpower(b,n/2,m)2 mod m

else return (mpower(b,n−1,m)·b) mod m

What is its time complexity?

2008/10/29

20

Θ(log n) steps

Page 21: Recursion

A Slight Variation

Nearly identical but takes Θ(n) time instead!

procedure mpower(b,n,m) {same signature}

if n=0 then return 1

else if 2|n then

return (mpower(b,n/2,m)·

mpower(b,n/2,m)) mod m

else return (mpower(b,n−1,m)·b) mod m

2008/10/29

21

The number of recursive calls made is critical.

Page 22: Recursion

Recursive Euclid’s Algorithm

Compute Greatest common divisor

procedure gcd(a,bN)

if a = 0 then return b

else return gcd(b mod a, a)

Example: gcd(5,8) = gcd(8%5,5)=gcd(3,5)=

gcd(5%3,3) = gcd(2,3) = gcd(3%2,2) = gcd(1,2)

=gcd(2%1,1)=gcd(0,1) = 1

2008/10/29

22

Page 23: Recursion

Sequential Search

Input: L is an array, i and j are positive integers, i j,

and x is the key to be searched for in L.

Output: If x is in L between indexes i and j, then

output its index, else output 0.

Algorithm:

if i j , then

{

if L(i) = x, then return i ;

else return SeqSearch(L, i+1, j, x)

}

else return 0. 29 October 2008

23

Page 24: Recursion

Ackermann’s Function

Find the value A(1,0), A(0,1), A(1,1), and A(2,2)

according to the following recursive definition.

2008/10/29

24

2 and 1 if)1,(,1

1 and 1 if2

0 and 1 if0

0 if2

.

nmnmAmA

nm

nm

mn

nmA