Python中的递归函数回文

时间:2009-06-04 17:51:31

标签: python recursion palindrome

我需要帮助编写一个递归函数来检测字符串是否是回文。但我不能使用任何循环,它必须是递归的。任何人都可以帮我告诉我这是如何完成的。我需要为即将到来的中期学习这个。我正在使用Python。

11 个答案:

答案 0 :(得分:46)

def ispalindrome(word):
    if len(word) < 2: return True
    if word[0] != word[-1]: return False
    return ispalindrome(word[1:-1])

这是最好的一个班轮

def ispalindrome(word):
    return word == word[::-1]

答案 1 :(得分:41)

从一般算法的角度来看,递归函数有3种情况:

1)剩下0件。根据身份,项目为palindrome

2)剩下1个项目。根据身份,项目为palindrome

3) 2件或更多件。删除第一个和最后一个项目相比。如果它们是相同的,则在字符串的左边调用函数。如果first和last不相同,则item不是palindrome

函数本身的实现留给读者练习:)

答案 2 :(得分:3)

如果一个字符串是零或一个字母长,那就是一个回文。

如果一个字符串的第一个和最后一个字母相同,剩下的字母(我认为它是Python中的[1: -1]切片,但我的Python有点生锈)是回文,它是回文。< / p>

现在,将其写为带有字符串的回文函数。它会自称。

答案 3 :(得分:2)

这是另一种观点

回文字符串是

  1. 有些信, x

  2. 一些回文副词。

  3. 同一个字母 x ,重复。

  4. 另外,请注意,您可能会被给予正确的英语句子“能够在我看到厄尔巴岛的时候。”标点符号。你的回文检查可能不得不悄悄地跳过标点符号。此外,您可能必须安静地匹配而不考虑案例。这稍微复杂一些。

    1. 一些领先的标点符号。一些字母, x

    2. 一些回文子串。

    3. 有些信件, x ,不考虑案件而重复。一些尾随标点符号。

    4. 根据定义,零长度字符串是回文结构。另外一个单字母的字符串(删除标点后)是一个回文。

答案 4 :(得分:2)

由于我们无论如何都要发布代码,并且还没有发布任何内容,所以这里是:

def palindrome(s):
    return len(s) < 2 or s[0] == s[-1] and palindrome(s[1:-1])

答案 5 :(得分:1)

该函数应该是一个字符串。如果字符串中有多个字母,则比较第一个和最后一个字母。如果是1或0个字母,则返回true。如果两个字母相等,则再次使用字符串调用该函数,而不是第一个和最后一个字母。如果它们不相等则返回false。

 palindrom( word):
   IF length of word 1 or 0 THEN
      return 0;
   IF last and first letter equal THEN
     word := remove first and last letter of word;
     palindrom( word);
   ELSE
     return false;

答案 6 :(得分:1)

这是一种你可以想到简单的递归函数的方法......翻转问题并以这种方式思考。你如何递归回文?我就是这样做的......

def make_palindrome():
    maybe:
        return ""
    elsemaybe:
        return some_char()
    else:
        c = some_char()
        return c + make_palindrome() + c

然后你可以翻转它来构建测试。

答案 7 :(得分:1)

a=raw_input("enter the string:")
b=len(a)
c=0
for i in range(b):
    if a[i]==a[-(i+1)]:
        c=c+1
if c==b:
    print a,"is polindrome"
else:
    print a,"is not polindrome"

答案 8 :(得分:0)

我的解决方案

#To solve this I'm using the stride notation within a slice [::]
def amazonPalindrome(input):
    inputB = input
    input = input[::-1]
    #print input
    noPalindrome = inputB + " is not a palindrome"
    isPalindrome = inputB + " is a palindrome"
    #compare the value of the reversed string to input string
    if input[0]!= input[-1]: 
        print noPalindrome
    else:
        print isPalindrome


#invoking the def requires at least 1 value or else it fails
#tests include splitting the string,mixing integers, odd amount palindromes.
#call the def  
amazonPalindrome('yayay')

答案 9 :(得分:-1)

n=raw_input("Enter a number===>")
n=str(n)
l=len(n)
s=""
for i in range(1,l+1):
    s=s+n[l-i]
if s==n:
    print "Given number is polindrom"
else:
    print "Given number is not polindrom"

答案 10 :(得分:-2)

这是C版本,如果有人碰巧在这里搜索C代码!

int IsPalindrome_Recursive(char *s, int start, int end)
{
    if ((end - start) < 2)
    {
        return 1;
    }
    if (s[start] != s[end])
    {
        return 0;
    }
    return IsPalindrome_Recursive(s, ++start, --end);
}

请致电:

IsPalindrome_Recursive(s, 0, strlen(s) - 1)