Programming for Engineers Recursions ICEN 200 Spring 2018 Prof. - - PowerPoint PPT Presentation

programming for engineers recursions
SMART_READER_LITE
LIVE PREVIEW

Programming for Engineers Recursions ICEN 200 Spring 2018 Prof. - - PowerPoint PPT Presentation

Programming for Engineers Recursions ICEN 200 Spring 2018 Prof. Dola Saha 1 Function call stack and stack frames Stack is analogous to a pile of books Known as last-in, first-out (LIFO) data structures Pop Push Stack of books 2


slide-1
SLIDE 1

1

Programming for Engineers Recursions

ICEN 200– Spring 2018

  • Prof. Dola Saha
slide-2
SLIDE 2

2

Function call stack and stack frames

Ø Stack is analogous to a pile of books Ø Known as last-in, first-out (LIFO) data structures

Push Pop Stack of books

slide-3
SLIDE 3

3

Function call stack

Ø Supports function call & return Ø Supports creation, maintenance & destruction of each

called function’s local variables

Ø Keeps track of return addresses that each function needs

to return control to the caller function

Ø Function call à an entry is pushed to stack Ø Function return à an entry is popped from stack

slide-4
SLIDE 4

4

Recursion

Ø A recursive function is a function that calls itself either

directly or indirectly through another function.

Ø Nature of recursion § One or more simple cases of the problem have a straightforward, nonrecursive solution. § The other cases can be redefined in terms of problems that are closer to the simple cases.

slide-5
SLIDE 5

5

Recursively calculating Factorial

Ø The factorial of a nonnegative integer n, written n!

(pronounced “n factorial”), is the product

  • n · (n –1) · (n – 2) · … · 1

with 1! equal to 1, and 0! defined to be 1.

Ø A recursive definition of the factorial function is arrived

at by observing the following relationship:

n! = n · (n – 1)! Ø Proof: n! = n · (n-1) · (n-2) ·…… · 2 · 1 n! = n · ( (n-1) · (n-2) ·…… · 2 · 1) n! = n · ((n-1)!)

slide-6
SLIDE 6

6

Recursive evaluation of 5!

slide-7
SLIDE 7

7

Recursive Factorial C Code (1)

slide-8
SLIDE 8

8

Recursive Factorial C Code (2)

slide-9
SLIDE 9

9

Recursive Factorial C Code (3) – Output

slide-10
SLIDE 10

10

Example Fibonacci Series by Recursion

Ø The Fibonacci series

  • 0, 1, 1, 2, 3, 5, 8, 13, 21, …

Ø

The Fibonacci series may be defined recursively as follows:

fibonacci(0) = 0 fibonacci(1) = 1 fibonacci(n) = fibonacci(n – 1) + fibonacci(n – 2)

slide-11
SLIDE 11

11

Recursive Fibonacci Series C Code (1)

slide-12
SLIDE 12

12

Recursive Fibonacci Series C Code (2)

slide-13
SLIDE 13

13

Recursive calls

slide-14
SLIDE 14

14

Recursion vs Iteration

Ø Both iteration and recursion are based on a control

statement: Iteration uses a repetition statement; recursion uses a selection statement.

Ø Both iteration and recursion involve repetition: Iteration

explicitly uses a repetition statement; recursion achieves repetition through repeated function calls.

Ø Iteration and recursion each involve a termination test:

Iteration terminates when the loop-continuation condition fails; recursion when a base case is recognized.

slide-15
SLIDE 15

15

Recursion is expensive

Ø It repeatedly invokes the mechanism, and consequently the

  • verhead, of function calls.

Ø This can be expensive in both processor time and memory

space.

Ø Each recursive call causes another copy of the function to be

created; this can consume considerable memory.

Ø The amount of memory in a computer is finite, so only a

certain amount of memory can be used to store stack frames

  • n the function call stack.

Ø If more function calls occur than can have their stack frames

stored on the function call stack, a fatal error known as a stack overflow occurs.

slide-16
SLIDE 16

16

Class Discussion

Ø Write a C Program to find product of 2 Numbers using

Recursion

Ø Example: § Multiply 6 by 3 § Divide it into two problems:

1.

Multiply 6 by 2

2.

Add 6 to the result of problem 1 § Split problem 1 into 2 smaller problems:

1.

Multiply 6 by 2

a)

Multiply 6 by 1

b)

Add 6 to the result of problem 1a)

2.

Add 6 to the result of problem 1

slide-17
SLIDE 17

17

Class Discussion

Ø Write a C Program to find product of 2 Numbers using

Recursion

Ø Example: § Multiply 6 by 3 § Divide it into two problems:

1.

Multiply 6 by 2

2.

Add 6 to the result of problem 1 § Split problem 1 into 2 smaller problems:

1.

Multiply 6 by 2

a)

Multiply 6 by 1

b)

Add 6 to the result of problem 1a)

2.

Add 6 to the result of problem 1 Ø Generalization: § If n is 1,

  • ans is m.

§ Else

  • ans is m + multiply(m-1)
slide-18
SLIDE 18

18

Trace Multiply

slide-19
SLIDE 19

19

Recursive Multiply

slide-20
SLIDE 20

20

Class Discussion

Ø Raising an integer to an integer power Ø Example: § 33 § Divide it into two problems:

1.

32

2.

Multiply 3 to the result of problem 1 § Split problem 1 into 2 smaller problems:

1.

32

a)

31

b)

Multiply 3 to the result of problem 1a)

2.

Multiply 3 to the result of problem 1

slide-21
SLIDE 21

21

Class Discussion

Ø Raising an integer to an integer power Ø Example: § 33 § Divide it into two problems:

1.

32

2.

Multiply 3 to the result of problem 1 § Split problem 1 into 2 smaller problems:

1.

32

a)

31

b)

Multiply 3 to the result of problem 1a)

2.

Multiply 3 to the result of problem 1 Ø Generalization: § If n is 1,

  • ans is m.

§ Else

  • ans is m * power(m,n)
slide-22
SLIDE 22

22

Count by Recursion

Ø Develop a function to count the number of times a

particular character appears in a string.

count(‘s’, “Mississippi sassafrs”);

slide-23
SLIDE 23

23

Counting Occurences Code (1)

slide-24
SLIDE 24

24

Counting Occurences Code (2)

slide-25
SLIDE 25

25

Iteration vs Recursion

Ø Iteration § When the problem is simple § When solution is not inherently recursive § The stack space available to a thread is often much less than the space available in the heap, Recursive algorithms require more stack space than iterative algorithms. Ø Recursion § When the problem is complex § When the solution is inherently recursive

slide-26
SLIDE 26

26

Iteration vs Recursion