0% found this document useful (0 votes)
24 views13 pages

Recursion

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)
24 views13 pages

Recursion

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/ 13

Recursion

What is Recursion?
🞂 Any function which calls itself is called recursive function and such function calls are
called recursive calls.
🞂 Recursion cannot be applied to all problems, but it is more useful for the tasks that
can be defined in terms of a similar subtask.
🞂 It is idea of representing problem a with smaller problems.
🞂 Any problem that can be solved recursively can be solved iteratively.
🞂 When recursive function call itself, the memory for called function allocated and
different copy of the local variable is created for each function call.
🞂 Some of the problem best suitable for recursion are
⮩ Factorial
⮩ Fibonacci
⮩ Tower of Hanoi
Working of Recursive function
Working
void func1();

void main()
{
....
func1();
.... Function
} call

void func1()
{ Recursive
.... function call
func1();
....
}
Properties of Recursion
🞂 A recursive function can go infinite like a loop. To avoid infinite running of recursive
function, there are two properties that a recursive function must have.
🞂 Base Case or Base criteria
⮩ It allows the recursion algorithm to stop.
⮩ A base case is typically a problem that is small enough to solve directly.
🞂 Progressive approach
⮩ A recursive algorithm must change its state in such a way that it moves forward to the base case.
Recursion - factorial example
🞂 The factorial of a integer n, is product Recursive trace
of
⮩ n * (n-1) * (n-2) * …. * 1 Final Ans 5 *24 = 120

🞂 Recursive definition of factorial Fact(5)


⮩ n! = n * (n-1)! return 4 * 6 = 24
call
⮩ Example
Fact(4)
▪ 3! = 3 * 2 * 1
▪ 3! = 3 * (2 * 1) return 3 * 2 = 6
call
▪ 3! = 3 * (2!)
Fact(3)
return 2 * 1 = 2
call
Fact(2)
return 1
call
Fact(1)
WAP to find factorial of given number using Recursion
Program Output
1 #include <stdio.h> Enter the number? 5
2 int fact(int); factorial = 120
3 void main()
4 {
5 int n, f;
6 printf("Enter the number?\n");
7 scanf("%d", &n);
8 f = fact(n);
9 printf("factorial = %d", f);
10 }
11 int fact(int n)
12 {
13 if (n == 0)
14 return 1;
15 else if (n == 1)
16 return 1;
17 else
18 return n * fact(n - 1);
19 }
Recursion - Fibonacci example
🞂 A series of numbers , where Recursive trace
next number is found by adding the
two number before it. Fib(4) Final Ans. 3

🞂 Recursive definition of Fibonacci return 2 return 1


⮩ Fib(0) = 0
⮩ Fib(1) = 1 Fib(3) Fib(2)
⮩ Fib(n) = Fib(n-1) + Fib(n-2)
return 1 return 1 return 0
🞂 Example return 1
Fib(2) Fib(1) Fib(1)
⮩ Fib(4) = Fib(3) + Fib(2) Fib(0)
⮩ Fib(4) = 3
return 1 return 0
Fib(1) Fib(0)
WAP to Display Fibonacci Sequence
Program Program contd.
1 #include <stdio.h> 15 int fibonacci(int n)
2 int fibonacci(int); 16 {
3 void main() 17 if (n == 0 || n == 1)
4 { 18 return n;
5 int n, m = 0, i; 19 else
6 printf("Enter Total terms\n"); 20 return (fibonacci(n - 1) +
7 scanf("%d", &n); fibonacci(n - 2));
8 printf("Fibonacci series\n"); 21 }
9 for (i = 1; i <= n; i++)
10 { Output
11 printf("%d ", fibonacci(m)); Enter Total terms
12 m++; 5
13 } Fibonacci series
14 } 0 1 1 2 3
Recursion - Decimal to Binary example
🞂 To convert decimal to binary, divide Recursive trace
decimal number by 2 till dividend will
be less then 2 Final Ans 13%2 + 10*110 = 1101
🞂 To convert decimal 13 to binary decToBin(13)
⮩ 13/2 = 6 reminder 1 return 6%2 + 10*11 = 110
call
⮩ 6/2 = 6 reminder 0
⮩ 3/2 = 3 reminder 1 decToBin(6)
⮩ 1/2 = 1 reminder 1 return 3%2 + 10*1 = 11
call
🞂 Recursive definition of Decimal to decToBin(3)
Binary return 1%2 + 10*0 = 1
call
⮩ decToBin(0) = 0
⮩ decToBin(n) = n%2 + 10* decToBin(n/2) decToBin(1)

🞂 Example return 0
call
⮩ decToBin(13) = 13%2 + 10 decToBin(6) decToBin(0)
⮩ decToBin(13) = 1101
WAP to Convert Decimal to Binary
Program Output
1 #include <stdio.h> Enter a decimal number: 12
2 int convertDecimalToBinary(int); The binary equivalent = 1100
3 void main()
4 {
5 int dec, bin;
6 printf("Enter a decimal number: ");
7 scanf("%d", &dec);
8 bin = convertDecimalToBinary(dec);
9 printf("The binary equivalent = %d \n",bin);
10 }
11 int convertDecimalToBinary(int dec)
12 {
13 if (dec == 0)
14 return 0;
15 else
16 return (dec % 2 + 10 *
convertDecimalToBinary(dec / 2));
17 }
WAP to Convert Binary to Decimal
Program Output
1 #include <stdio.h> Enter a binary number: 101
2 int convertBinaryToDecimal(int b, int c, int t); Decimal value of 101 is 5
3 void main()
4 {
5 unsigned int binary, decimal;
6 printf("Enter a binary number: ");
7 scanf("%d", &binary);
8 decimal = convertBinaryToDecimal(binary, 1, 0);
9 printf("Decimal value of %d is %d", binary, decimal);
10 }
11 int convertBinaryToDecimal(int b, int c, int t)
12 {
13 if (b > 0)
14 {
15 t += (b % 10) * c;
16 convertBinaryToDecimal(b / 10, c * 2, t);
17 }
18 else
19 return t;
20 }
Practice Programs
1) Write a program to find factorial of a given number using recursion.
2) WAP to convert decimal number into binary using recursion.
3) WAP to use recursive calls to evaluate F(x) = x – x3/3! + x5/5! – x7/7! + … + xn/n!

Thank you

You might also like