Given a string, write a recursive program to reverse it.

Method 1 (Using Stack)
C++
#include <bits/stdc++.h>
using namespace std;
void recursiveReverse(string &str;)
{
stack<char> st;
for (int i=0; i<str.length(); i++)
st.push(str[i]);
for (int i=0; i<str.length(); i++) {
str[i] = st.top();
st.pop();
}
}
int main()
{
string str = "geeksforgeeks";
recursiveReverse(str);
cout << str;
return 0;
}
|
Java
import java.util.*;
class GFG
{
public static String recursiveReverse(char []str)
{
Stack<Character> st = new Stack<>();
for(int i=0; i<str.length; i++)
st.push(str[i]);
for (int i=0; i<str.length; i++) {
str[i] = st.peek();
st.pop();
}
return String.valueOf(str);
}
public static void main(String []args)
{
String str = "geeksforgeeks";
str = recursiveReverse(str.toCharArray());
System.out.println(str);
}
}
|
Python3
def recursiveReverse(str):
stack = []
for i in range(len(str)):
stack.append(str[i])
for i in range(len(str)):
str[i] = stack.pop()
if __name__ == "__main__":
str = "geeksforgeeks"
str = list(str)
recursiveReverse(str)
str = ''.join(str)
print(str)
|
C#
using System;
using System.Collections.Generic;
class GFG
{
public static String recursiveReverse(char []str)
{
Stack<char> st = new Stack<char>();
for(int i = 0; i < str.Length; i++)
st.Push(str[i]);
for (int i = 0; i < str.Length; i++)
{
str[i] = st.Peek();
st.Pop();
}
return String.Join("",str);
}
public static void Main()
{
String str = "geeksforgeeks";
str = recursiveReverse(str.ToCharArray());
Console.WriteLine(str);
}
}
|
Javascript
<script>
function recursiveReverse(str)
{
var revString = "";
for (var i = str.length - 1; i >= 0; i--)
{
revString += str[i];
}
return revString;
}
var str = "geeksforgeeks";
document.write(recursiveReverse(str));
</script>
|
Time complexity : O(n)
Auxiliary Space : O(n)
Method 2 (Iterative)
C++
#include <bits/stdc++.h>
using namespace std;
void reverseStr(string& str)
{
int n = str.length();
for (int i = 0; i < n / 2; i++)
swap(str[i], str[n - i - 1]);
}
int main()
{
string str = "geeksforgeeks";
reverseStr(str);
cout << str;
return 0;
}
|
Java
import java.util.Scanner;
public class reverseStr
{
void stringReverse()
{
String str = "geeksforgeeks";
int length = str.length();
StringBuffer revString = new StringBuffer();
for (int i = length - 1;
i >= 0; i--)
{
revString.append(str.charAt(i));
}
System.out.println(revString);
}
public static void main(String []args)
{
reverseStr s= new reverseStr();
s.stringReverse();
}
}
|
Python
def reverseStr(str):
n = len(str)
str1 = ''
i = n - 1
while i >= 0:
str1 += str[i]
i -= 1
print(str1)
def main():
str = "geeksforgeeks";
reverseStr(str);
if __name__=="__main__":
main()
|
C#
using System;
class GFG
{
static String reverseStr(String str)
{
int n = str.Length;
for (int i = 0; i < n / 2; i++)
str = swap(str,i,n - i - 1);
return str;
}
static String swap(String str, int i, int j)
{
char []ch = str.ToCharArray();
char temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
return String.Join("",ch);
}
public static void Main(String[] args)
{
string str = "geeksforgeeks";
str= reverseStr(str);
Console.WriteLine(str);
}
}
|
PHP
<?php
function reverseStr(&$str)
{
$n = strlen($str);
for ($i = 0; $i < $n / 2; $i++)
list($str[$i],
$str[$n - $i - 1]) = array($str[$n - $i - 1],
$str[$i]);
}
$str = "geeksforgeeks";
reverseStr($str);
echo $str;
?>
|
Javascript
<script>
function reverseStr(str)
{
let n = str.length;
for (let i = 0; i < parseInt(n / 2, 10); i++)
str = swap(str,i,n - i - 1);
return str;
}
function swap(str, i, j)
{
let ch = str.split('');
let temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
return ch.join("");
}
let str = "geeksforgeeks";
str= reverseStr(str);
document.write(str);
</script>
|
Time complexity : O(n)
Auxiliary Space : O(1)
Method 3 (Iterative using two pointers)
C++
#include <bits/stdc++.h>
using namespace std;
void reverseStr(string& str)
{
int n = str.length();
for (int i=0, j=n-1; i<j; i++,j--)
swap(str[i], str[j]);
}
int main()
{
string str = "geeksforgeeks";
reverseStr(str);
cout << str;
return 0;
}
|
Java
class GFG {
static void reverseStr(String str)
{
int n = str.length();
char []ch = str.toCharArray();
char temp;
for (int i=0, j=n-1; i<j; i++,j--)
{
temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
System.out.println(ch);
}
public static void main(String[] args) {
String str = "geeksforgeeks";
reverseStr(str);
}
}
|
Python3
def reverseStr(str):
n = len(str)
i, j = 0, n-1
while i < j:
str[i], str[j] = str[j], str[i]
i += 1
j -= 1
if __name__ == "__main__":
str = "geeksforgeeks"
str = list(str)
reverseStr(str)
str = ''.join(str)
print(str)
|
C#
using System;
class GFG
{
static void reverseStr(String str)
{
int n = str.Length;
char []ch = str.ToCharArray();
char temp;
for (int i=0, j=n-1; i<j; i++,j--)
{
temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
Console.WriteLine(ch);
}
public static void Main(String[] args)
{
String str = "geeksforgeeks";
reverseStr(str);
}
}
|
PHP
<?php
function reverseStr (&$str)
{
$n = strlen($str);
for ($i = 0, $j = $n - 1;
$i < $j; $i++, $j--)
list($str[$i],
$str[$j]) = array($str[$j],
$str[$i]);
}
$str = "geeksforgeeks";
reverseStr($str);
echo $str;
?>
|
Time complexity : O(n)
Auxiliary Space : O(1)
Method 4 (Recursive)
C++
#include <bits/stdc++.h>
using namespace std;
void recursiveReverse(string &str;, int i = 0)
{
int n = str.length();
if (i == n / 2)
return;
swap(str[i], str[n - i - 1]);
recursiveReverse(str, i + 1);
}
int main()
{
string str = "geeksforgeeks";
recursiveReverse(str);
cout << str;
return 0;
}
|
Java
class GFG
{
static void recursiveReverse(char[] str, int i)
{
int n = str.length;
if (i == n / 2)
return;
swap(str,i,n - i - 1);
recursiveReverse(str, i + 1);
}
static void swap(char []arr, int i, int j)
{
char temp= arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void main(String[] args)
{
char[] str = "geeksforgeeks".toCharArray();
recursiveReverse(str,0);
System.out.println(String.valueOf(str));
}
}
|
Python3
def recursiveReverse(str, i = 0):
n = len(str)
if i == n // 2:
return
str[i], str[n-i-1] = str[n-i-1], str[i]
recursiveReverse(str, i+1)
if __name__ == "__main__":
str = "geeksforgeeks"
str = list(str)
recursiveReverse(str)
str = ''.join(str)
print(str)
|
C#
using System;
public class GFG
{
static void recursiveReverse(char[] str, int i)
{
int n = str.Length;
if (i == n / 2)
return;
swap(str,i,n - i - 1);
recursiveReverse(str, i + 1);
}
static char[] swap(char []arr, int i, int j)
{
char temp= arr[i];
arr[i]=arr[j];
arr[j]=temp;
return arr;
}
public static void Main(String[] args)
{
char[] str = "geeksforgeeks".ToCharArray();
recursiveReverse(str,0);
Console.WriteLine(String.Join("",str));
}
}
|
C++
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str = "geeksforgeeks";
reverse(str.begin(),str.end());
cout << str;
return 0;
}
|
Java
class GFG
{
public static void main(String[] args)
{
String str = "geeksforgeeks";
str = reverse(str);
System.out.println(str);
}
static String reverse(String input)
{
char[] temparray = input.toCharArray();
int left, right = 0;
right = temparray.length - 1;
for (left = 0; left < right; left++, right--)
{
char temp = temparray[left];
temparray[left] = temparray[right];
temparray[right] = temp;
}
return String.valueOf(temparray);
}
}
|
Python
def reverseStr(str):
print(str[::-1])
def main():
str = "geeksforgeeks";
reverseStr(str);
if __name__=="__main__":
main()
|
C#
using System;
class GFG
{
public static void Main(String[] args)
{
String str = "geeksforgeeks";
str = reverse(str);
Console.WriteLine(str);
}
static String reverse(String input)
{
char[] temparray = input.ToCharArray();
int left, right = 0;
right = temparray.Length - 1;
for (left = 0; left < right; left++, right--)
{
char temp = temparray[left];
temparray[left] = temparray[right];
temparray[right] = temp;
}
return String.Join("",temparray);
}
}
|
PHP
<?php
function reverseStr($str)
{
echo strrev($str);
}
$str = "geeksforgeeks";
reverseStr($str);
?>
|
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.
In case you wish to attend live classes with industry experts, please refer Geeks Classes Live