GFG App
Open App
Browser
Continue

# C Program to Reverse a String Using Recursion

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

## C

 `// C program to reverse a string using recursion ` `# include ` ` `  `/* 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 ` ` `  `/* 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