Open In App

C Program to Reverse a String Using Recursion

Improve
Improve
Like Article
Like
Save
Share
Report

Reversing a string means changing the order of characters in the string so that the last character becomes the first character of the string. 

Reverse a string in C

 

Example:

Input: Geeks 
Output: skeeG
Input: Hello 
Output: olleH

Simple Approach

Below is the C program to reverse a string using recursion:

C




// C program to reverse a string
// using recursion
# include <stdio.h>
 
// Function to print reverse of
// the passed string
void reverse(char *str)
{
  if (*str)
  {
    reverse(str + 1);
    printf("%c", *str);
  }
}
 
// Driver code
int main()
{
  char a[] = "Geeks for Geeks";
  reverse(a);
  return 0;
}


Output

skeeG rof skeeG

Explanation of the above method

  • The recursive function (reverse) takes the string pointer (str) as input and calls itself with the next location to the passed pointer (str+1). 
  • Recursion continues this way when the pointer reaches ‘\0’, all functions accumulated in stack print char at passed location (str) and return one by one.

The complexity of the method above

Time Complexity: O(n^2) as substr() method has a time complexity of O(k) where k is the size of the returned string. 

So for every recursive call, we are reducing the size of the string by one, which leads to a series like (k-1)+(k-2)+…+1 = k*(k-1)/2 = O(k^2) = O(n^2)
See Reverse a string for other methods to reverse a string.

Auxiliary Space: O(n)

Efficient Approach

We can store each character in the recursive stack and then can print while coming back as shown in the below code: 

C




// C program to reverse a string
// using recursion
#include <stdio.h>
 
// Function to print reverse of the
// passed string
void reverse(char *str, int index,
             int n)
{
    // return if we reached at last index or
    // at the end of the string
    if(index == n)
        return;
   
    // storing each character starting from index 0
    // in function call stack;
    char temp = str[index];
   
    // calling recursive function by increasing
    // index everytime
    reverse(str, index + 1, n);
   
    // printing each stored character while
    // recurring back
    printf("%c", temp);            
}
 
// Driver code
int main()
{
    char a[] = "Geeks for Geeks";
    int n = sizeof(a) / sizeof(a[0]);
    reverse(a, 0, n);
   
    return 0;
}


Output

skeeG roF skeeG

The Complexity of the method above

Time Complexity: O(n) where n is the size of the string

Auxiliary Space: O(n) where n is the size of the string, which will be used in the form of a function call stack of recursion.



Last Updated : 19 Jun, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads