0% found this document useful (0 votes)
46 views18 pages

ITC Lect 14 (Functions-III)

The document discusses various aspects of functions in C++ including recursion, default arguments, inline functions, function overloading, and references. It provides examples of calculating the factorial and Fibonacci series recursively. It also demonstrates declaring functions with empty parameter lists, setting default arguments, using the scope resolution operator, and overloading functions. The document recommends Dietel and Dietel's book "How to Program C++" for further information on functions.

Uploaded by

sayed Tamir jan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
46 views18 pages

ITC Lect 14 (Functions-III)

The document discusses various aspects of functions in C++ including recursion, default arguments, inline functions, function overloading, and references. It provides examples of calculating the factorial and Fibonacci series recursively. It also demonstrates declaring functions with empty parameter lists, setting default arguments, using the scope resolution operator, and overloading functions. The document recommends Dietel and Dietel's book "How to Program C++" for further information on functions.

Uploaded by

sayed Tamir jan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

Lecture 14: Functions CS 101: Introduction to Computing

Functions - III

Dr. Zahid Halim

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 14: Functions CS 101: Introduction to Computing

Recursion

• Example: factorial
n! = n * ( n – 1 ) * ( n – 2 ) * … * 1
– Recursive relationship ( n! = n * ( n – 1 )! )
5! = 5 * 4!
4! = 4 * 3!…
– Base case (1! = 0! = 1)

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 14: Functions CS 101: Introduction to Computing

Example Using Recursion: The Fibonacci Series

• Fibonacci series: 0, 1, 1, 2, 3, 5, 8...


– Each number sum of two previous ones
– Example of a recursive formula:
fib(n) = fib(n-1) + fib(n-2)

• C++ code for fibonacci function


long fibonacci( long n )
{
if ( n == 0 || n == 1 ) // base case
return n;
else return fibonacci( n - 1 ) + fibonacci( n – 2 );
}

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 14: Functions CS 101: Introduction to Computing

Example Using Recursion: The Fibonacci Series

• Diagram of Fibonnaci function


f( 3 )

return f( 2 ) + f( 1 )

return f( 1 ) + f( 0 ) return 1

return 1 return 0

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


1 // Fig. 3.15: fig03_15.cpp
2 // Recursive fibonacci function
3 #include <iostream>
4
5 using std::cout;
6 using std::cin;
7 using std::endl;
8
9 unsigned long fibonacci( unsigned long );
10
11 int main()
12 {
13 unsigned long result, number;
14
15 cout << "Enter an integer: ";
16 cin >> number;
17 result = fibonacci( number );
18 cout << "Fibonacci(" << number << ") = " << result << endl;
19 return 0;
20 }
21
22 // Recursive definition of function fibonacci
23 unsigned long fibonacci( unsigned long n ) Only the base cases return
24 {
values. All other cases call
25 if ( n == 0 || n == 1 ) // base case
26 return n;
the fibonacci function
27 else // recursive case again.
28 return fibonacci( n - 1 ) + fibonacci( n - 2 );
29 }
Enter an integer: 0
Fibonacci(0) = 0
Enter an integer: 1
Fibonacci(1) = 1
Enter an integer: 2
Fibonacci(2) = 1
Enter an integer: 3
Fibonacci(3) = 2
Enter an integer: 4
Fibonacci(4) = 3

Enter an integer: 5
Fibonacci(5) = 5

Enter an integer: 10
Fibonacci(10) = 55

Enter an integer: 6
Fibonacci(6) = 8
Enter an integer: 20
Fibonacci(20) = 6765
Enter an integer: 30
Fibonacci(30) = 832040

Enter an integer: 35
Fibonacci(35) = 9227465
Lecture 14: Functions CS 101: Introduction to Computing

Recursion vs. Iteration

• Repetition
– Iteration: explicit loop
– Recursion: repeated function calls
• Termination
– Iteration: loop condition fails
– Recursion: base case recognized
• Both can have infinite loops
• Balance between performance (iteration) and good
software engineering (recursion)

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 14: Functions CS 101: Introduction to Computing

Functions with Empty Parameter Lists

• Empty parameter lists


– Either writing void or leaving a parameter list empty indicates
that the function takes no arguments
void print();
or
void print( void );
– Function print takes no arguments and returns no value

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


1 // Fig. 3.18: fig03_18.cpp
2 // Functions that take no arguments
3 #include <iostream>
4
5 using std::cout;
6 using std::endl;
7 Notice the two ways
8 void function1(); of declaring no
9 void function2( void );
arguments.
10
11 int main()
12 {
13 function1();
14 function2();
15
16 return 0;
17 }
18
19 void function1()
20 {
21 cout << "function1 takes no arguments" << endl;
22 }
23
24 void function2( void )
25 {
26 cout << "function2 also takes no arguments" << endl;
27 }

function1 takes no arguments


function2 also takes no arguments
Lecture 14: Functions CS 101: Introduction to Computing

Inline Functions
• inline functions
– Reduce function-call overhead
– Asks the compiler to copy code into program instead of
using a function call
– Compiler can ignore inline
– Should be used with small, often-used functions
• Example:
inline double cube( const double s )
{ return s * s * s; }

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 14: Functions CS 101: Introduction to Computing

Default Arguments

• If function parameter omitted, gets default value


– Can be constants, global variables, or function calls
– If not enough parameters specified, rightmost go to their defaults
• Set defaults in function prototype
int defaultFunction( int x = 1,
int y = 2, int z = 3 );

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


1 // Fig. 3.23: fig03_23.cpp
2 // Using default arguments
3 #include <iostream>
4
5 using std::cout;
6 using std::endl;
7
8 int boxVolume( int length = 1, int width = 1, int height = 1 );
9
10 int main()
11 {
12 cout << "The default box volume is: " << boxVolume()
13 << "\n\nThe volume of a box with length 10,\n"
14 << "width 1 and height 1 is: " << boxVolume( 10 )
15 << "\n\nThe volume of a box with length 10,\n"
16 << "width 5 and height 1 is: " << boxVolume( 10, 5 )
17 << "\n\nThe volume of a box with length 10,\n"
18 << "width 5 and height 2 is: " << boxVolume( 10, 5, 2 )
19 << endl;
20
21 return 0;
22 }
23
24 // Calculate the volume of a box
25 int boxVolume( int length, int width, int height )
26 {
27 return length * width * height;
28 }
The default box volume is: 1

The volume of a box with length 10,


width 1 and height 1 is: 10

The volume of a box with length 10,


width 5 and height 1 is: 50

The volume of a box with length 10,


width 5 and height 2 is: 100

Notice how the


rightmost values are
defaulted.
Lecture 14: Functions CS 101: Introduction to Computing

Unary Scope Resolution Operator

• Unary scope resolution operator (::)


– Access global variables if a local variable has same name
– not needed if names are different
– instead of variable use ::variable

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


1 // Fig. 3.24: fig03_24.cpp
2 // Using the unary scope resolution operator
3 #include <iostream>
4
5 using std::cout;
6 using std::endl;
7
8 #include <iomanip>
9
10 using std::setprecision;
11
12 const double PI = 3.14159265358979;
13
14 int main()
15 {
16 const float PI = static_cast< float >( ::PI );
17
Notice the use of
18 cout << setprecision( 20 ) ::
19 << " Local float value of PI = " << PI
20 << "\nGlobal double value of PI = " << ::PI << endl;
21
22 return 0;
23 }

Local float value of PI = 3.141592741012573242


Global double value of PI = 3.141592653589790007
Lecture 14: Functions CS 101: Introduction to Computing

Function Overloading

• Function overloading
– Having functions with same name and different parameters
– Should perform similar tasks ( i.e., a function to square ints, and
function to square floats).
int square( int x) {return x * x;}
float square(float x) { return x * x; }
– Program chooses function by signature
• signature determined by function name and parameter types
– Can have the same return types

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


1 // Fig. 3.25: fig03_25.cpp
2 // Using overloaded functions
3 #include <iostream>
4 Functions have same
5 using std::cout; name but different
6 using std::endl; parameters
7
8 int square( int x ) { return x * x; }
9
10 double square( double y ) { return y * y; }
11
12 int main()
13 {
14 cout << "The square of integer 7 is " << square( 7 )
15 << "\nThe square of double 7.5 is " << square( 7.5 )
16 << endl;
17
18 return 0;
19 }

The square of integer 7 is 49


The square of double 7.5 is 56.25
Lecture 14: Functions CS 101: Introduction to Computing

References
Dietal and Dietal : How to Program C++
3rd Edition

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi

You might also like