回文递归函数

时间:2016-07-23 13:52:07

标签: python list function recursion palindrome

我尝试写一个递归函数,该函数说明一个字符串是一个回文,但我得到的是一个无限循环,我不知道问题是什么

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")

5 个答案:

答案 0 :(得分:2)

希望能帮到你

def ispalindrome(word):

    if len(word)<=1:
        print("Palindrome")
        return
    else:
        if word[0]!=word[-1]:
            print("Not a palindrome")
            return
        return ispalindrome(word[1:len(word)-1])

word=input("Enter word ")

ispalindrome(word)

答案 1 :(得分:1)

首先,正确缩进代码。

其次,您使用相同的参数再次调用该函数。使用&#39; listush&#39;您要从中删除或删除&#39; S&#39;并用S论证进行递归。

答案 2 :(得分:1)

无需创建列表。 python字符串已经是一个可索引的序列。

更好的是,我们可以使用切片并让函数返回TrueFalse而不是带有文本的元组。所有这些,isPalindrome()变成一个单行:< / p>

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

答案 3 :(得分:0)

如果您执行print(listush),则可以看到您的列表永远不会更改。 您的代码的以下修改有效:

def isPalindrome(testStr, orig=None):
    if orig is None:
        orig = testStr
    length = len(testStr) #length=6
    print(testStr)
    if length == 0 or length == 1:
        return orig, "is a palindrome!"
    elif testStr[0] != testStr[-1]:
       return orig, "is not a palindrome!"
    else:
        return isPalindrome(testStr[1:-1], orig)

print isPalindrome("abnnba")

答案 4 :(得分:0)

我想对你的代码说些什么

  • 您可以发送一份清单,省去了删除的麻烦 元件。
  • 您无需将其转换为列表,即您需要的所有操作 寻找回文是由字符串支持。
  • 你在递归函数中返回S,这将是一个    空列表(或字符串),因为它减少了每次递归。在    递归案例,我建议您只返回TrueFalse

这是一个例子。

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])

这很简单。