📜  检查字符串是否为回文的递归函数

📅  最后修改于: 2022-05-13 01:57:07.612000             🧑  作者: Mango

检查字符串是否为回文的递归函数

给定一个字符串,编写一个递归函数来检查给定的字符串是否是回文,否则,不是回文。

例子:

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

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

我们在这里讨论了一个迭代函数。
递归函数的想法很简单:

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

下面是上述思想的实现:

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


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;
 
}


输出
Yes

另一种方法:

基本上在遍历时检查第 i 个和第 ni-1 个索引是否相等。

如果不相等,则返回 false,如果它们相等,则继续递归调用。

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;
 
}
输出
Yes

时间复杂度: O(n)

辅助空间: O(n)