我需要帮助编写一个递归函数来检测字符串是否是回文。但我不能使用任何循环,它必须是递归的。任何人都可以帮我告诉我这是如何完成的。我需要为即将到来的中期学习这个。我正在使用Python。
答案 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)
这是另一种观点
回文字符串是
有些信, x 。
一些回文副词。
同一个字母 x ,重复。
另外,请注意,您可能会被给予正确的英语句子“能够在我看到厄尔巴岛的时候。”标点符号。你的回文检查可能不得不悄悄地跳过标点符号。此外,您可能必须安静地匹配而不考虑案例。这稍微复杂一些。
一些领先的标点符号。一些字母, x 。
一些回文子串。
有些信件, x ,不考虑案件而重复。一些尾随标点符号。
根据定义,零长度字符串是回文结构。另外一个单字母的字符串(删除标点后)是一个回文。
答案 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)