回文递归函数

2024-10-02 16:28:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个递归的函数来判断字符串是否是回文,但我得到的只是一个无限循环,我不知道问题出在哪里

def isPalindrome(S):
    listush=list(S) #listush=['a', 'b', 'n', 'n', 'b', 'a']
    length=len(listush) #length=6
    if length==0 or length==1:
        return S, "is a palindrome!"
    elif listush[0]!=listush[-1]:
        return S, "is not a palindrome!"
    else:
        del listush[0]
        del listush[-1]
        return isPalindrome(S)

print isPalindrome("abnnba")

Tags: or函数字符串lenreturnifisdef
3条回答

没有必要创建列表。python字符串已经是可索引的序列。在

更好的是,我们可以使用切片,让函数返回True和{}而不是一个包含文本的元组,这样,isPalindrome()就变成了一个单行线:

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

print isPalindrome('A')
>>> True
print isPalindrome('AA')
>>> True
print isPalindrome('BAAB')
>>> True
print isPalindrome('ABAB')
>>> False

首先,正确地缩进代码。在

其次,使用相同的参数再次调用函数。使用要从中删除或从“S”中删除的“listush”列表调用,并使用S参数递归。在

关于你的代码,我想说一些事情

  • 你可以发送列表的一部分,省去了删除的麻烦 元素。在
  • 你不需要把它转换成一个列表,所有你需要的操作 在查找回文时,字符串支持它。在
  • 在递归函数中返回S,这将是一个 空列表(或字符串),因为它正在减少每次递归。在 递归情况下,我建议您只返回True或{}

这里有一个例子。在

def isPalindrome(S):
    length=len(S)
    if length < 2:
        return True
    elif S[0] != S[-1]:
        return False
    else:
        return isPalindrome(S[1:length - 1])

就这么简单。在

相关问题 更多 >