GeeksforGeeks App
Open App
Browser
Continue

# Recursive function to check if a string is palindrome

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 ``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 ``#include ``#include ` `// 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

 ``

## Javascript

 ``

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 ``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

 ``   `   `

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