C Program To Find GCD of Two Numbers using Recursion: Euclid’s Algorithm

Lets write a C program to find GCD(Greatest Common Divisor) or HCF(Highest Common Factor) of two positive integer numbers input by the user using Euclid’s Algorithm and by using Recursive function call logic.

Related Read:
C Program To Find GCD and LCM of Two Numbers using Euclidean algorithm
Recursive Functions In C Programming Language

Euclid’s Algorithm Logic

If user inputs 2 numbers n1 and n2, reduce the bigger number by modulo dividing it by the smaller number. For example, if n1 is greater than n2, then reduce the value of n1 by replacing it with n1%n2.

Assume that we’ve a function gcd() which returns gcd of 2 numbers passed to it. Ex: gcd(n1, n2);

According to Euclid’s Algorithm, we’ll get the same gcd if we reduce the bigger number by modulo dividing it by smaller number.

If n1 > n2 we need to pass gcd(n1%n2, n2);
If n2 > n1, we need to pass gcd(n1, n2%n1);

We need to recursively execute above 2 lines of logic until either n1 is 0 or until n2 is 0. If n1 is 0, then value present in n2 is the gcd of (n1,n2). If n2 is 0, then value present in n1 is the gcd of (n1,n2).

Video Tutorial: C Program To Find GCD of Two Numbers using Recursion: Euclid’s Algorithm


[youtube https://www.youtube.com/watch?v=k6zrTKpSg20]

YouTube Link: https://www.youtube.com/watch?v=k6zrTKpSg20 [Watch the Video In Full Screen.]


Source Code: C Program To Find GCD of Two Numbers using Recursion: Euclid’s Algorithm

#include<stdio.h>

int gcd(int, int);

int main()
{
    int num1, num2;

    printf("Enter 2 positive integer numbers\n");
    scanf("%d%d", &num1, &num2);

    printf("\nGCD of %d and %d is %d.\n", num1, num2, gcd(num1, num2));

    return 0;
}

int gcd(int n1, int n2)
{
    if(n1 == 0) return n2;
    if(n2 == 0) return n1;

    if(n1 > n2)
        return gcd(n1%n2, n2);
    else
        return gcd(n1, n2%n1);
}

Output 1:
Enter 2 positive integer numbers
1980
1617

GCD of 1980 and 1617 is 33.

Output 2:
Enter 2 positive integer numbers
15
20

GCD of 15 and 20 is 5.

Example:

Lets assume that user has entered n1 = 1980 and n2 = 1617

n1n2Biggest NoEvaluateFunction Call
198016171980gcd(1980 % 1617, 1617)gcd(363, 1617)
36316171617gcd(363, 1617 % 363)gcd(363, 165)
363165363gcd(363 % 165, 165)gcd(33, 165)
33165165gcd(33, 165 % 33)gcd(33, 0)

In above table gcd(33, 0) gets called, since n2 = 0, our program returns value of n1 as gcd, which is 33.

So GCD of 1980 and 1617 is 33.

Source Code: C Program To Find GCD of Two Numbers using Recursion and Ternary or Conditional Operator: Euclid’s Algorithm

#include<stdio.h>

int gcd(int, int);

int main()
{
    int num1, num2;

    printf("Enter 2 positive integer numbers\n");
    scanf("%d%d", &num1, &num2);

    printf("GCD of %d and %d is %d.\n", num1, num2, gcd(num1, num2));

    return 0;
}

int gcd(int n1, int n2)
{
    if(n1 == 0) return n2;
    if(n2 == 0) return n1;

    return( (n1 > n2) ? gcd(n1%n2, n2) : gcd(n1, n2%n1) );
}

Output 1:
Enter 2 positive integer numbers
1980
1617

GCD of 1980 and 1617 is 33.

Know more about ternary operator or conditional operator, watch a separate video tutorial: Ternary Operator / Conditional Operator In C.

For list of all c programming interviews / viva question and answers visit: C Programming Interview / Viva Q&A List

For full C programming language free video tutorial list visit:C Programming: Beginner To Advance To Expert

C Program To Find Factorial of a Number using Recursion

Lets write a C program to find Factorial of a user input number using Recursion.

Factorial Definition: Factorial of a positive integer n, denoted by n!, is the product of all positive integers less than or equal to n.

Important Note: By convention, Factorial of 0 is 1. i.e., 0! = 1.

Example: 5! = 5 x 4 x 3 x 2 x 1 which is equal to 120. i.e., 5! = 120.

Formula To Calculate Factorial of any positive integer number
We can calculate factorial of any number using this relationship:

num! = num * (num – 1)!

where num is a positive integer number.

Related Read:
C Program To Find Factorial of a Number
Recursive Functions In C Programming Language

Video Tutorial: C Program To Find Factorial of a Number using Recursion


[youtube https://www.youtube.com/watch?v=efcK6uNZzKw]

YouTube Link: https://www.youtube.com/watch?v=efcK6uNZzKw [Watch the Video In Full Screen.]


Source Code: C Program To Find Factorial of a Number using Recursion

#include<stdio.h>

int fact(int);

int main()
{
    int num;

    printf("Enter a positive number to find its Factorial\n");
    scanf("%d", &num);

    printf("\nFactorial of %d is %d.\n", num, fact(num));

    return 0;
}

int fact(int num)
{
    if(num)
        return(num * fact(num - 1));
    else
        return 1;
}

Output 1:
Enter a positive number to find its Factorial
7

Factorial of 7 is 5040.

Output 2:
Enter a positive number to find its Factorial
8

Factorial of 8 is 40320.

Logic To Find Factorial of a Number using Recursion

We ask the user to enter a positive integer number and we pass this number to a function called fact().

Inside fact() function
Inside fact() function, we check if the number is non-zero, if true, we execute the code inside if block orelse(if num is zero), then the code inside else block gets executed.

Inside if block, we add the factorial of (num-1) to the value of num.

num * fact(num – 1)

and return the result to the calling function.

Inside else block, we simply return 1. Because factorial of 0 is 1. So when num is 0, we return 1.

Example:

numnum * fact(num-1)
55 * fact(4)
44 * fact(3)
33 * fact(2)
22 * fact(1)
11 * fact(0)

Value Returning – Control Shifting back.

FunctionReturn Value Result
1 * fact(0)return 1;1 * 1 = 1
2 * fact(1)12 * 1 = 2
3 * fact(2)23 * 2 = 6
4 * fact(3)64 * 6 = 24
5 * fact(4)245 * 24 = 120

Finally 120 will be returned to main() method where we call the fact() method.

Source Code: C Program To Find Factorial of a Number using Recursion and Ternary or Conditional Operator

#include<stdio.h>

int fact(int);

int main()
{
    int num;

    printf("Enter a positive number to find its Factorial\n");
    scanf("%d", &num);

    printf("\nFactorial of %d is %d.\n", num, fact(num));

    return 0;
}

int fact(int num)
{
    return( (num > 0) ? (num * fact(num - 1)) : 1 );
}

Output 1:
Enter a positive number to find its Factorial
5

Factorial of 5 is 120.

Output 2:
Enter a positive number to find its Factorial
6

Factorial of 6 is 720.

Know more about ternary operator or conditional operator, watch a separate video tutorial: Ternary Operator / Conditional Operator In C.

Memory Stack

Whenever there is a recursive function call, function instance and the memory associated with that function instance gets pushed into the stack. When any function instance returns a value, that function instance and memory associated with that function instance gets popped out or removed or gets deleted from the memory stack.

For list of all c programming interviews / viva question and answers visit: C Programming Interview / Viva Q&A List

For full C programming language free video tutorial list visit:C Programming: Beginner To Advance To Expert

C Program To Find Sum of Natural Numbers Using Recursion

Write a recursive function to obtain the running sum of first 25 natural numbers.

1 + 2 + 3 + 4 + 5 + …. + 23 + 24 + 25 = 325

Related Read:
C Program to Calculate the Sum of Natural Numbers From 1 to N
C Program To Calculate the Sum of Natural Numbers From 1 to N using For Loop
Recursive Functions In C Programming Language

Video Tutorial: C Program To Find Sum of Natural Numbers Using Recursion


[youtube https://www.youtube.com/watch?v=EnUpKX5ps58]

YouTube Link: https://www.youtube.com/watch?v=EnUpKX5ps58 [Watch the Video In Full Screen.]


Source Code: C Program To Find Sum of Natural Numbers Using Recursion

#include<stdio.h>

int sum(int num)
{
    if(num)
        return(num + sum(num-1));
    else
        return 0;
}

int main()
{
    int count = 25;

    printf("Sum of 1st 25 natural numbers is %d\n", count, sum(count));

    return 0;
}

Output:
Sum of 1st 25 natural numbers is 325

Logic To Find Sum of Natural Numbers Using Recursion

25 is passed to a function sum, from main method. Inside function sum(), if the passed number is a non-zero then we add sum(num-1) to num. We keep doing it until num value is 0. Once num is 0, code inside else block gets executed and 0 is returned.

Source Code: Find Sum of Natural Numbers Using Recursion – Take input from user

#include<stdio.h>

int sum(int num)
{
    if(num)
        return(num + sum(num-1));
    else
        return 0;
}

int main()
{
    int count;

    printf("Enter a positive no\n");
    scanf("%d", &count);

    printf("Sum of 1st %d natural numbers is %d\n", count, sum(count));

    return 0;
}

Output 1:
Enter a positive no
5
Sum of 1st 5 natural numbers is 15

Output 2:
Enter a positive no
14
Sum of 1st 14 natural numbers is 105

Example:

Lets assume user has input num value as 5.
Recursive Call sum(num – 1).

numCalling FunctionReturned Value
5sum(5)
5sum(4)10
4sum(3)6
3sum(2)3
2sum(1)1
1sum(0)0
0return 0;

Value Returning – Control Shifting back.

num+sum(num-1)Return ValueResult
1 + sum(0)01 + 0 = 1
2 + sum(1)12 + 1 = 3
3 + sum(2)33 + 3 = 6
4 + sum(3)64 + 6 = 10
5 + sum(4)105 + 10 = 15

Finally, after completing the recursive calls and once num is equal to zero, sum() will return 15 to main().

i.e., 1 + 2 + 3 + 4 + 5 = 15.

For list of all c programming interviews / viva question and answers visit: C Programming Interview / Viva Q&A List

For full C programming language free video tutorial list visit:C Programming: Beginner To Advance To Expert

C Program To Print Natural Numbers using Recursion

Lets write a C program to print/display natural numbers from 1 to user entered limit, using recursive function calls.

Related Read:
C Program to Print Natural Numbers from 1 to N using While loop
C Program to Print Natural Numbers from 1 to N using for loop
Recursive Functions In C Programming Language

Video Tutorial: C Program To Print Natural Numbers from 1 To N using Recursion


[youtube https://www.youtube.com/watch?v=Ji574fawdfo]

YouTube Link: https://www.youtube.com/watch?v=Ji574fawdfo [Watch the Video In Full Screen.]


Source Code: C Program To Print Natural Numbers using Recursion

#include<stdio.h>

void display(int);

int main()
{
    int limit;

    printf("Enter the number of terms to be printed\n");
    scanf("%d", &limit);

    printf("\nNatural Numbers from 1 To %d are:", limit);
    display(limit);

    return 0;
}

void display(int num)
{
    if(num)
        display(num-1);
    else
        return;

    printf("\n%d\n", num);
}

Output:
Enter the number of terms to be printed
14

Natural Numbers from 1 To 14 are:
1

2

3

4

5

6

7

8

9

10

11

12

13

14

Logic To Print Natural Numbers using Recursion

We ask the user to input the limit or the number of terms of natural numbers to be printed. We store that value inside variable limit. We pass this value to a function called display().

Inside display() function
We check if number is not zero, in that case we call the same function display() recursively and pass (num-1) to it. In the else block we write the base condition, that is, return the control back to the calling function if num is 0.

This prints the natural numbers from 1 to user input limit.

Example:

If limit = 5. We copy the value of limit to num. So num = 5.

numCalling FunctionCalled Function
5main()display(5)
5display(5)display(4)
4display(4)display(3)
3display(3)display(2)
2display(2)display(1)
1display(1)display(0)
returns the control backdisplay(0)return;

Value Returning – Control Shifting back.

FunctionReturn Value
return;
display(0)1
display(1)2
display(2)3
display(3)4
display(4)5

For list of all c programming interviews / viva question and answers visit: C Programming Interview / Viva Q&A List

For full C programming language free video tutorial list visit:C Programming: Beginner To Advance To Expert

C Program To Reverse a Number using Recursion

Lets write a C program to reverse a user input number, using recursive function.

Example: If user input number is 12345, recursive function should return 54321 i.e., the reversed number.

Related Read:
C Program To Reverse a Number
Recursive Functions In C Programming Language

Video Tutorial: C Program To Reverse a Number using Recursion


[youtube https://www.youtube.com/watch?v=yQt27d-OBfk]

YouTube Link: https://www.youtube.com/watch?v=yQt27d-OBfk [Watch the Video In Full Screen.]


Source Code: C Program To Reverse a Number using Recursion

#include<stdio.h>
#include<math.h>

int reverse(int num)
{
    if(num)
        return( (num%10) * pow(10, (int)log10(num)) + reverse(num/10) );
    else
        return 0;
}

int main()
{
    int num, isNegative = 1, result = 0;

    printf("Enter a number to reverse\n");
    scanf("%d", &num);

    isNegative = (num < 0);

    if(isNegative)
        num *= -1;

    result = reverse(num);

    if(isNegative)
        result *= -1;


    printf("Reverse of %d is %d\n", num, result);

    return 0;
}

Output 1:
Enter a number to reverse
12345
Reverse of 12345 is 54321

Output 2:
Enter a number to reverse
-12345
Reverse of -12345 is -54321

Logic To Reverse a Number using Recursion

We ask the user to input a number, and store it inside variable num. If num is negative, then we store 1(true) inside variable isNegative or store 0(false) inside variable isNegative if num is positive.

If isNegative is 1, then we change the value of num to positive and send it as argument to reverse() function.

Inside reverse() function
If num is 0, it returns 0. Else we recursively call reverse() function as follows:

(num%10) * pow(10, (int)log10(num)) + reverse(num/10)

num % 10 gives the last digit in the number.
log10(num) gives the length of the number or the number of digits present in the number. The count starts from 0. Ex: if num = 12345, then log10(num) would give 4.

num/10 reduces the number by 1 digit from right.

pow(10, (int)log10(num)) is used to properly place the reminder value in its decimal place.

Lets assume that user has input 1234 as value of num.

i.e., num = 1234;

Recursive Function Calls – Stacking of calls

numnum % 10num%10*log10(num)num/10
1234reverse(1234)
123444 * 103 = 4000reverse(123)
12333 * 102 = 300reverse(12)
1222 * 101 = 20reverse(1)
111 * 100 = 1reverse(0)

Value Returning – Control Shifting back.

Return ToresultresolveReturn Value
reverse(0)0
reverse(1)1* 100+reverse(0)1 * 1 + 01
reverse(12)2*101+reverse(1)2 * 10 + 121
reverse(123)3*102+reverse(12)3 * 100 + 21321
reverse(1234)4*103+reverse(123)4 * 1000 + 3214321

Note: Whenever there is a call to a function, the function instance(and memory associated with it) gets stored in the memory stack. Once the function returns value to calling function, the control shifts back to the calling function and the memory instance gets popped or deleted out of the memory stack immediately after returning the value.

Source Code: C Program To Reverse a Number using Recursion and Ternary Operator

#include<stdio.h>
#include<math.h>

int reverse(int num)
{
return( (num>0) ?
        ((num%10) * pow(10, (int)log10(num)) + reverse(num/10)) :
         0);
}

int main()
{
    int num, isNegative = 1, result;

    printf("Enter a number to reverse\n");
    scanf("%d", &num);

    isNegative = (num < 0);

    if(isNegative)
        num *= -1;

    result = reverse(num);

    if(isNegative)
    {
        num *= -1;
        result *= -1;
    }


    printf("Reverse of %d is %d\n", num, result);

    return 0;
}

Output 1:
Enter a number to reverse
123
Reverse of 123 is 321

Output 2:
Enter a number to reverse
-123
Reverse of -123 is -321

Know more about ternary operator or conditional operator, watch a separate video tutorial: Ternary Operator / Conditional Operator In C

Source Code: C Program To Reverse a Number using Recursion without using log10() function

#include<stdio.h>
#include<math.h>

int reverse(int num, int len)
{
    if(num)
        return( (num%10) * pow(10, len-1) + reverse(num/10, len-1) );
    else
        return 0;
}

int main()
{
    int num, count = 0, temp;

    printf("Enter a number to reverse\n");
    scanf("%d", &num);

    temp = num;

    while(temp)
    {
        count++;
        temp = temp / 10;
    }

    printf("Reverse of %d is %d\n", num, reverse(num, count));

    return 0;
}

Output 1:
Enter a number to reverse
123456
Reverse of 123456 is 654321

Output 2:
Enter a number to reverse
-123456
Reverse of -123456 is -654321

Logic To Reverse a Number using Recursion without using log10() function

Inside main method itself we calculate the number of digits present in the user entered number and then pass that information to the function reverse() along with the user entered number.

reverse(num, count);

Inside reverse() function
Inside reverse() function, we get the reminder by modulo dividing num by 10. We place this remainder in it’s decimal place by multiplying it with

pow(10, len-1)

where len is the length or the number of digits present in the number.

Next we recursively call reverse() function and pass the value of (num/10) and (len-1).

Finally we combine all these results using below formula and return the value to the calling function recursively, until num is equal to 0:

(num%10) * pow(10, len-1) + reverse(num/10, len-1)

Look at above tables to know the calling function and return values.

For list of all c programming interviews / viva question and answers visit: C Programming Interview / Viva Q&A List

For full C programming language free video tutorial list visit:C Programming: Beginner To Advance To Expert