Skip to content
Related Articles
Get the best out of our app
GFG App
Open App
geeksforgeeks
Browser
Continue

Related Articles

C Program to Reverse a String Using Recursion

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

Write a recursive function to print the reverse of a given string. 

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 program to test above function */
int main()
{
   char a[] = "Geeks for Geeks";
   reverse(a);
   return 0;
}


Output: 
 

skeeG rof skeeG

Explanation: Recursive function (reverse) takes string pointer (str) as input and calls itself with next location to 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.

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 string.
Auxiliary Space: O(n)

Efficient Approach: 

We can store each character in 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)
{
    if(index == n)   // return if we reached at last index or at the end of the string
    {
        return;
    }
    char temp = str[index]; // storing each character starting from index 0 in function call stack;
    reverse(str, index+1, n); // calling recursive function by increasing index everytime
    printf("%c", temp);          // printing each stored character while recurring back
}
  
/* Driver program to test above function */
  
int main() {
  
    char a[] = "Geeks for Geeks";
    int n = sizeof(a) / sizeof(a[0]);
    reverse(a, 0, n);
    return 0;
}


Output:

skeeG rof skeeG

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

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


My Personal Notes arrow_drop_up
Last Updated : 26 Oct, 2022
Like Article
Save Article
Similar Reads