Skip to content
Related Articles

Related Articles

Recursive function to check if a string is palindrome

View Discussion
Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 21 Aug, 2022
View Discussion
Improve Article
Save Article

Given a string, write a recursive function that checks if the given string is a palindrome, else, not a palindrome.

Examples: 

Input : malayalam
Output : Yes
Reverse of malayalam is also
malayalam.

Input : max
Output : No
Reverse of max is not max. 

We have discussed an iterative function here

The idea of a recursive function is simple: 

1) If there is only one character in string
   return true.
2) Else compare first and last characters
   and recur for remaining substring.

Below is the implementation of the above idea: 

C++




// A recursive C++ program to
// check whether a given number
// is palindrome or not
#include <bits/stdc++.h>
using namespace std;
 
// A recursive function that
// check a str[s..e] is
// palindrome or not.
bool isPalRec(char str[],
              int s, int e)
{
     
    // If there is only one character
    if (s == e)
    return true;
 
    // If first and last
    // characters do not match
    if (str[s] != str[e])
    return false;
 
    // If there are more than
    // two characters, check if
    // middle substring is also
    // palindrome or not.
    if (s < e + 1)
    return isPalRec(str, s + 1, e - 1);
 
    return true;
}
 
bool isPalindrome(char str[])
{
    int n = strlen(str);
     
    // An empty string is
    // considered as palindrome
    if (n == 0)
        return true;
     
    return isPalRec(str, 0, n - 1);
}
 
// Driver Code
int main()
{
    char str[] = "geeg";
 
    if (isPalindrome(str))
    cout << "Yes";
    else
    cout << "No";
 
    return 0;
}
 
// This code is contributed by shivanisinghss2110

C




// A recursive C program to
// check whether a given number
// is palindrome or not
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
 
// A recursive function that
// check a str[s..e] is
// palindrome or not.
bool isPalRec(char str[],
              int s, int e)
{
    // If there is only one character
    if (s == e)
    return true;
 
    // If first and last
    // characters do not match
    if (str[s] != str[e])
    return false;
 
    // If there are more than
    // two characters, check if
    // middle substring is also
    // palindrome or not.
    if (s < e + 1)
    return isPalRec(str, s + 1, e - 1);
 
    return true;
}
 
bool isPalindrome(char str[])
{
int n = strlen(str);
 
// An empty string is
// considered as palindrome
if (n == 0)
    return true;
 
return isPalRec(str, 0, n - 1);
}
 
// Driver Code
int main()
{
    char str[] = "geeg";
 
    if (isPalindrome(str))
    printf("Yes");
    else
    printf("No");
 
    return 0;
}

Java




// A recursive JAVA program to
// check whether a given String
// is palindrome or not
import java.io.*;
 
class GFG
{
    // A recursive function that
    // check a str(s..e) is
    // palindrome or not.
    static boolean isPalRec(String str,
                            int s, int e)
    {
        // If there is only one character
        if (s == e)
            return true;
 
        // If first and last
        // characters do not match
        if ((str.charAt(s)) != (str.charAt(e)))
            return false;
 
        // If there are more than
        // two characters, check if
        // middle substring is also
        // palindrome or not.
        if (s < e + 1)
            return isPalRec(str, s + 1, e - 1);
 
        return true;
    }
 
    static boolean isPalindrome(String str)
    {
        int n = str.length();
 
    // An empty string is
    // considered as palindrome
        if (n == 0)
            return true;
 
        return isPalRec(str, 0, n - 1);
    }
 
    // Driver Code
    public static void main(String args[])
    {
        String str = "geeg";
 
        if (isPalindrome(str))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
// This code is contributed
// by Nikita Tiwari

Python




# A recursive Python program
# to check whether a given
# number is palindrome or not
 
# A recursive function that
# check a str[s..e] is
# palindrome or not.
def isPalRec(st, s, e) :
     
    # If there is only one character
    if (s == e):
        return True
 
    # If first and last
    # characters do not match
    if (st[s] != st[e]) :
        return False
 
    # If there are more than
    # two characters, check if
    # middle substring is also
    # palindrome or not.
    if (s < e + 1) :
        return isPalRec(st, s + 1, e - 1);
 
    return True
 
def isPalindrome(st) :
    n = len(st)
     
    # An empty string is
    # considered as palindrome
    if (n == 0) :
        return True
     
    return isPalRec(st, 0, n - 1);
 
 
# Driver Code
st = "geeg"
if (isPalindrome(st)) :
    print "Yes"
else :
    print "No"
     
# This code is contributed
# by Nikita Tiwari.

C#




// A recursive C# program to
// check whether a given number
// is palindrome or not
using System;
 
class GFG
{
 
    // A recursive function that
    // check a str(s..e)
    // is palindrome or not.
    static bool isPalRec(String str,
                         int s,
                         int e)
    {
         
        // If there is only one character
        if (s == e)
            return true;
 
        // If first and last character
        // do not match
        if ((str[s]) != (str[e]))
            return false;
 
        // If there are more than two
        // characters, check if middle
        // substring is also
        // palindrome or not.
        if (s < e + 1)
            return isPalRec(str, s + 1,
                            e - 1);
             return true;
    }
 
    static bool isPalindrome(String str)
    {
        int n = str.Length;
 
        // An empty string is considered
        // as palindrome
        if (n == 0)
            return true;
 
        return isPalRec(str, 0, n - 1);
    }
 
    // Driver Code
    public static void Main()
    {
        String str = "geeg";
 
        if (isPalindrome(str))
            Console.Write("Yes");
        else
            Console.Write("No");
    }
}
 
// This code is contributed by Nitin Mittal.

PHP




<?php
// A recursive php program to
// check whether a given number
// is palindrome or not
 
 
// A recursive function that
// check a str[s..e] is
// palindrome or not.
function isPalRec($str, $s,$e)
{
    // If there is only one character
    if ($s == $e)
    return true;
 
    // If first and last
    // characters do not match
    if ($str[$s] != $str[$e])
    return false;
 
    // If there are more than two
    // characters, check if middle
    // substring is also palindrome or not.
    if ($s < $e + 1)
    return isPalRec($str, $s + 1, $e - 1);
 
    return true;
}
 
function isPalindrome($str)
{
$n = strlen($str);
 
// An empty string is
// considered as palindrome
if ($n == 0)
    return true;
 
return isPalRec($str, 0, $n - 1);
}
 
// Driver Code
{
    $str = "geeg";
 
    if (isPalindrome($str))
    echo("Yes");
    else
    echo("No");
 
    return 0;
}
 
// This code is contributed
// by nitin mittal.
?>

Javascript




<script>
    // A recursive javascript program to
    // check whether a given String
    // is palindrome or not
    // A recursive function that
    // check a str(s..e) is
    // palindrome or not.
    function isPalRec( str , s , e) {
        // If there is only one character
        if (s == e)
            return true;
 
        // If first and last
        // characters do not match
        if ((str.charAt(s)) != (str.charAt(e)))
            return false;
 
        // If there are more than
        // two characters, check if
        // middle substring is also
        // palindrome or not.
        if (s < e + 1)
            return isPalRec(str, s + 1, e - 1);
 
        return true;
    }
 
    function isPalindrome( str) {
        var n = str.length;
 
        // An empty string is
        // considered as palindrome
        if (n == 0)
            return true;
 
        return isPalRec(str, 0, n - 1);
    }
 
    // Driver Code
     
        var str = "geeg";
 
        if (isPalindrome(str))
            document.write("Yes");
        else
            document.write("No");
 
// This code contributed by gauravrajput1
</script>

Output

Yes

Time Complexity: O(n)
Auxiliary Space: O(n)

Another Approach :

Basically while traversing check whether ith and n-i-1th index are equal or not.

If there are not equal return false and if they are equal then continue with the recursion calls.

C++




#include <iostream>
using namespace std;
 
bool isPalindrome(string s, int i){
        
    if(i > s.size()/2){
       return true ;
    }
    
    return s[i] == s[s.size()-i-1] && isPalindrome(s, i+1) ;
    
}
     
     
int main()
{
    string str = "geeg" ;
    if (isPalindrome(str, 0))
    cout << "Yes";
    else
    cout << "No";
 
    return 0;
 
}

Java




/*package whatever //do not write package name here */
import java.io.*;
 
class GFG {
  public static boolean isPalindrome(String s, int i){
    if(i > s.length()/2)
    {
      return true ;
    }
 
    return s.charAt(i) == s.charAt(s.length()-i-1) && isPalindrome(s, i+1) ;
 
  }
 
  public static void main (String[] args) {
    String str = "geeg" ;
    if (isPalindrome(str, 0))
    { System.out.println("Yes"); }
    else
    { System.out.println("No"); }
 
  }
}
 
// This code is contributed by akashish.

Python3




def isPalindrome(s, i):
    if(i > len(s)/2):
       return True
    ans = False
    if((s[i] is s[len(s) - i - 1]) and isPalindrome(s, i + 1)):
      ans = True
    return ans
 
str = "geeg"
if (isPalindrome(str, 0)):
    print("Yes")
else:
    print("No")
     
# This code is contributed by akashish__

C#




using System;
 
public class GFG{
 
  public static bool isPalindrome(string s, int i){
 
    if(i > s.Length/2){
      return true ;
    }
 
    return s[i] == s[s.Length-i-1] && isPalindrome(s, i+1) ;
 
  }
 
  public static void Main (){
 
    // Code
    string str = "geeg" ;
    if (isPalindrome(str, 0))
    {
      Console.WriteLine("Yes");
    }
 
    else
    {
      Console.WriteLine("No");
    }
 
 
  }
}
 
// This code is contributed by akashish_.

Javascript




<script>
function isPalindrome(s,i){
if(i > s.length/2)
        {return true;}
    return s[i] == s[s.length-i-1] && isPalindrome(s, i+1)
     
   let str = "geeg";
let ans = isPalindrome(str, 0);
if (ans == true)
    {
        console.log("Yes");}
else
    {
        console.log("No");}
         
        // This code is contributed by akashish__
</script>
 
 
 
    

Output

Yes

Time Complexity: O(n)
Auxiliary Space: O(n)

This article is contributed by Sahil Rajput. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!