CSE109
• Recursive function(or Recursion)
• Mathematical functions in C(<math.h> header
file)
©LPU CSE101 C Programming
Outline
• Recursion
• Examples of recursion
– Finding factorial of a number
– Finding sum of all numbers from 1 to n
– Printing n terms of Fibonacci series using
recursion
• Recursion Vs Iteration
• Mathematical functions in C
©LPU CSE101 C Programming
Recursion
• It is a process in which function calls itself again
and again and the function which is called is
known as recursive function
• Recursion is supported with two cases: base
case and recursive case
• Base case is one which helps to stop the
recursion once the required operation is done
• Recursive case is one which keeps on repeating
and function will keep on calling itself
©LPU CSE101 C Programming
Example
int fact(int n)
{
if (n < = 1) // base case( Here the recursion will stop)
return 1;
else
return n*fact(n-1); //recursive case where fact() is calling itself
}
©LPU CSE101 C Programming
Recursion example (factorial)
©LPU CSE101 C Programming
Program example 1-Write a program to find the factorial of a
number using recursion(or recursive function)
#include <stdio.h>
long long int factorial(int);
int main()
{
int n;
printf("Enter a positive integer: ");
scanf("%d", &n);
printf("Factorial of %d = %lld", n, factorial(n));
return 0;
}
long long int factorial(int n)
{
if (n <=1)
return 1;
else
return n*factorial(n-1);
}
©LPU CSE101 C Programming
Program example 2-Write a program to find the sum of all
numbers from 1 to n using recursion(or recursive function)
#include <stdio.h>
int addNumbers(int n);
int main()
{
int num;
printf("Enter a positive integer: ");
scanf("%d", &num);
printf("Sum = %d",addNumbers(num));
return 0;
}
int addNumbers(int n)
{
if(n == 0)
return n;
else
return n + addNumbers(n-1);
}
©LPU CSE101 C Programming
Recursion example-3 (Fibonacci series)
• What is Fibonacci series: …??
• 0, 1, 1, 2, 3, 5, 8...
– Each number is the sum of the previous two
– Can be solved recursively:
• fib( n ) = fib( n - 1 ) + fib( n – 2 )
– Code for the fibonacci function
long fibonacci( long n )
{
if (n == 0 || n == 1) // base case
return n;
else
return fibonacci( n - 1)+fibonacci( n – 2 );
}
©LPU CSE101 C Programming
Recursion example (fibonacci)
• Set of recursive calls to fibonacci() function
f( 3 )
return f( 2 ) + f( 1 )
return f( 1 ) + f( 0 ) return 1
return 1 return 0
©LPU CSE101 C Programming
Program example 3-WAP to display n terms of Fibonacci series using
recursion(or recursive function)
#include<stdio.h>
int Fibonacci(int);
int main()
{
int n, i;
printf("\n Enter number of terms you want to print:");
scanf("%d",&n);
printf("Fibonacci series\n");
for(i=0;i<n;i++)
{
printf("%d\n", Fibonacci(i));
}
return 0;
}
int Fibonacci(int n)
{
if ( n == 0 )
return 0;
else if ( n == 1 )
return 1;
else
return ( Fibonacci(n-1) + Fibonacci(n-2) );
}
©LPU CSE101 C Programming
Recursion vs. Iteration
©LPU CSE101 C Programming
Rules for recursive function
1. In recursion, it is essential to call a function itself
2. Only the user defined function can be involved in
the recursion. Library function cannot be
involved in recursion because their source code
cannot be viewed
3. A recursive function can be invoked by itself or
by other function.
4. To stop recursive function, it is necessary to have
a proper base case, otherwise infinite recursion
can happen
5. main() function can be invoked recursively.
©LPU CSE101 C Programming
Math Library Functions(or
Mathematical functions in C)
• Math library functions
– perform common mathematical calculations
– #include <math.h>
• Format for calling maths functions
– functionName( argument );
• If multiple arguments, use comma-separated list
• Example:
printf( "%.2f", sqrt( 900.0 ) );
• Calls function sqrt, which returns the square root of its argument
• All math functions return data type double
– Arguments may be constants, variables, or expressions
©LPU CSE101 C Programming
Math Library Functions
©LPU CSE101 C Programming
Math Library Functions: pow()
∙ The power function, pow(x,y), calculates xy; that is, the
value of
pow(x,y) = xy.
∙ pow(2,3)= 2³ = 8.0 and pow(2.5,3) = 15.625.
∙ The function pow is of the type double or that the function
pow returns a value of the type double.
∙ x and y are called the parameters (or arguments) of the
function pow.
∙ Function pow has two parameters.
©LPU CSE101 C Programming
sqrt()
∙ The square root function, sqrt(x),
calculates the non-negative square root of x for x >= 0.0
sqrt(2.25) is 1.5
sqrt(25) is 5.0
∙ The function sqrt is of the type double and has only one
parameter.
©LPU CSE101 C Programming
fabs()
• fabs calculates the absolute value of a float
argument.
fabs(2.25) is 2.25
fabs(-25.0) is 25.0
∙The function fabs is of the type double
and has only one parameter.
©LPU CSE101 C Programming
floor()
∙ The floor function, floor, calculates the largest
whole number that is not greater than x.
floor(48.79) is 48.0
floor(48.03) is 48.0
floor(47.79) is 47.0
∙ The function floor is of the type double and has
only one parameter.
©LPU CSE101 C Programming
ceil()
∙ The ceil function, ceil, calculates the smallest
whole number that is not less than x.
ceil(48.79) is 49
ceil(48.03) is 49
ceil(47.79) is 48
∙ The function ceil is of the type double and has
only one parameter.
©LPU CSE101 C Programming
©LPU CSE101 C Programming
Program example
#include<stdio.h>
#include<math.h>
int main()
{
double x=9.0,y=8.0,z=7.0;
printf("\nLog value is:%lf",log(x));
printf("\nLog value with base 10 is:%lf",log10(x));
printf("\nExponential value is:%lf",exp(x));
printf("\n Ceil value is:%lf",ceil(8.94));
printf("\n Floor value is:%lf",floor(2.34));
printf("\n Power:%lf",pow(3.0,2.0));
printf("\n Floating absolute is:%lf",fabs(-2.9));
printf("\n Square root value is:%lf",sqrt(9));
printf("\n Sin:%f,cos:%f,tan:%lf",sin(x),cos(y),tan(z));
printf("\n fMod:%f",fmod(2.0,1.5));
return 0;
©LPU CSE101 C Programming
Q1
What is the output of the following code?
void my_recursive_function(int n)
{
if(n == 0)
return;
printf("%d ",n);
my_recursive_function(n-1);
}
int main()
{
my_recursive_function(5);
return 0;
}
A. 5
B. 1
C. 543210
D. 54321
©LPU CSE101 C Programming
Q2
Predict output of following program
#include <stdio.h>
int fun(int n)
{
if (n == 4)
return n;
else return 2*fun(n+1);
}
int main()
{
printf("%d ", fun(2));
return 0;
}
A. 4
B. 8
C. 16
D. 10
©LPU CSE101 C Programming
Q3
Consider the following recursive function fun(x, y). What is
the value of fun(4, 3)
int fun(int x, int y)
{
if (x == 0)
return y;
return fun(x - 1, x + y);
}
A. 13
B. 12
C. 9
D. 10
©LPU CSE101 C Programming
Q4
What does the following function print for n = 25?
void fun(int n)
{
if (n == 0)
return;
printf("%d", n%2);
fun(n/2);
}
A. 11001
B. 10011
C. 11111
D. 00000
©LPU CSE101 C Programming