# Functions Exercises

Write a recursive function in C programming to find reverse of a number. How to find reverse of a number in C programming using recursion. Logic to find reverse of a number using recursion in C programming.

**Required knowledge**

Basic C programming, If else,for loop,Functions, Recursion

**Declare recursive function to find reverse of a number**

- First let us give a meaningful name to our function, say reverse().
- The function computes reverse of number, hence it must accept an integer parameter. So let us update our function declaration reverse(int num).
- Finally, the function computes and returns an integer which is reverse of given number.

After looking on above points function declaration to find reverse of a number is - int reverse(int num);

**Logic to find reverse of number using recursion**

Step by step descriptive logic to find reverse of a number.

- Multiply reverse variable by 10.
- Find the last digit of the given number.
- Add last digit just found to reverse.
- Divide the original number by 10 to remove last digit, which is not needed anymore.

Repeat above four steps till the number becomes 0 and we are left with the reversed number in reverse variable.

Here also we will use the above four steps to find reverse using recursive approach with the given base condition:

reverse(0) = 0 {Base condition}

reverse(n) = (n%10 * pow(10, digits)) + reverse(n/10) {where digit is number of digits in number}

**Program to find reverse of a number using recursion**

/** * C program to find reverse of any number using recursion */ #include <stdio.h> #include <math.h> /* Fuction declaration */ int reverse(int num); int main() { int num, rev; /* Input number from user */ printf("Enter any number: "); scanf("%d", &num); /* Call the function to reverse number */ rev = reverse(num); printf("Reverse of %d = %d", num, rev); return 0; } /** * Recursive function to find reverse of any number */ int reverse(int num) { // Find total digits in num int digit = (int) log10(num); // Base condition if(num == 0) return 0; return ((num%10 * pow(10, digit)) + reverse(num/10)); }

The above program works fine. However, as mentioned by one of our reader it doesn't works for negative values. This is because we are using log10() function and logarithm is only defined for positive values. Hence, to make it work for negative values we have to make little modification in our logic.

**Program to find reverse of a negative number using recursion**

To find reverse of negative number use the logic for positive number reverse which I mentioned above. In addition check if the number is negative then convert it to positive and then pass it to reverse() function. One more condition you need to check, if number was negative then convert the reversed number to negative.

/** * C program to find reverse of any number using recursion */ #include <stdio.h> #include <math.h> /* Fuction declaration */ int reverse(int num); int main() { int num, rev, numIsNegative; /* Input number from user */ printf("Enter any number: "); scanf("%d", &num); /* Assign 1 if(num < 0) otherwise 0 */ numIsNegative = (num < 0); /* If num is negative, then convert it to positive */ if(numIsNegative) num *= -1; /* Call the function to reverse number */ rev = reverse(num); /* If num was negative, then convert the reverse to negative */ if(numIsNegative) rev *= -1; printf("Reverse of %d = %d", num, rev); return 0; } /** * Recursive function to find reverse of any number */ int reverse(int num) { // Find total number of digits in num int digit = (int) log10(num); // Base condition if(num == 0) return 0; return ((num%10 * pow(10, digit)) + reverse(num/10)); }

**Output**

Enter any number: 3136

Reverse of 3136 = 6313