C Programming for Engineers Functions & Recursions ICEN 360 - - PowerPoint PPT Presentation

c programming for engineers functions recursions
SMART_READER_LITE
LIVE PREVIEW

C Programming for Engineers Functions & Recursions ICEN 360 - - PowerPoint PPT Presentation

C Programming for Engineers Functions & Recursions ICEN 360 Spring 2017 Prof. Dola Saha 1 Classwork Assignment Compute rim area of a flat washer using function to calculate the area. 2 Writing a function to calculate area 3


slide-1
SLIDE 1

1

C Programming for Engineers Functions & Recursions

ICEN 360– Spring 2017

  • Prof. Dola Saha
slide-2
SLIDE 2

2

Classwork Assignment

Ø Compute rim area of a flat washer using function to

calculate the area.

slide-3
SLIDE 3

3

Writing a function to calculate area

slide-4
SLIDE 4

4

Math Library Functions

Ø Performs common mathematical calculations.

slide-5
SLIDE 5

5

More Math Library Functions

Ø #include <math.h>

slide-6
SLIDE 6

6

Self Review Assignment

Ø Modify the program to compute the rim area of a flat

washer using two functions

§ To calculate the area § To compute the square

slide-7
SLIDE 7

7

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-8
SLIDE 8

8

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-9
SLIDE 9

9

Example C Code

slide-10
SLIDE 10

10

Function call & Stack frame

slide-11
SLIDE 11

11

Function call & Stack frame

slide-12
SLIDE 12

12

Function call & Stack frame

slide-13
SLIDE 13

13

Passing argument by value & by pointer

Pass by Value Pass by Pointer A copy of argument’s value is made and passed to the function An address to the argument is passed to the function Changes to copy do not change the original value Changes to the value of the address does change the original value Most commonly used Should be used by trusted functions only

slide-14
SLIDE 14

14

Example Pass-by-value & Pass-by-reference

Output

slide-15
SLIDE 15

15

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-16
SLIDE 16

16

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-17
SLIDE 17

17

Recursive evaluation of 5!

slide-18
SLIDE 18

18

Recursive Factorial C Code (1)

slide-19
SLIDE 19

19

Recursive Factorial C Code (2)

slide-20
SLIDE 20

20

Recursive Factorial C Code (3) – Output

slide-21
SLIDE 21

21

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-22
SLIDE 22

22

Recursive Fibonacci Series C Code (1)

slide-23
SLIDE 23

23

Recursive Fibonacci Series C Code (2)

slide-24
SLIDE 24

24

Recursive calls

slide-25
SLIDE 25

25

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-26
SLIDE 26

26

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-27
SLIDE 27

27

Classwork Assignment

Ø 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-28
SLIDE 28

28

Classwork Assignment

Ø The greatest common divisor of integers x and y is the

largest integer that evenly divides both x and y. Write a recursive function gcd that returns the greatest common divisor of x and y.

Ø The gcd of x and y is defined recursively as follows: § If y is equal to 0, then gcd(x, y) is x; § otherwise gcd(x, y) is gcd(y, x % y), where % is the remainder operator.

slide-29
SLIDE 29

29

Storage Class

Ø Storage class determines storage duration, scope and

linkage

Ø Duration: Period when the identifier exists in memory Ø Scope: Where the identifier can be referenced in a

program

Ø Linkage: Determines whether the identifier is known in

current file or other linked ones

auto register extern static

slide-30
SLIDE 30

30

auto Storage Class

Ø Keyword auto is used to declare variables of

automatic storage duration.

Ø Created when the block in which they’re defined is

entered

Ø Exists while the block is active Ø Destroyed when the block is exited

Ø Local variables – declared within function argument or

body, are auto by default

Ø auto keyword is rarely used

slide-31
SLIDE 31

31

static Storage Class

Ø Keywords extern and static are used for static

storage

Ø Exists from beginning of execution until end Ø Storage is allocated and initialized only once, before the

program begins execution

Ø Scope defines where it can be accessed from

slide-32
SLIDE 32

32