首页 > 解决方案 > 使用递归来确定一个词是否是回文

问题描述

我正在尝试确定给定单词是否是回文。

我的代码的目标是该函数将接受一个单词,并删除它的任何标点符号或空格。如果单词的长度为 0 或 1,则返回该单词是回文。然后我检查第一个和最后一个字母是否相同。如果不是,则返回它不是回文。如果它们的第一个和最后一个字母相同,那么我想用空格替换这两个字母并再次调用我的函数。我用空格替换字母的原因是它会被我最初的编辑语句编辑。

def palindrome(word):
    editWord = word.strip(" ").strip("!").strip("?")

    stringOne = "A palindrome"
    stringTwo = "Not a palindrome"

    if len(editWord) == 0 or len(editWord) == 1:
        return stringOne

    elif editWord[0] != editWord[-1]:
        return stringTwo

    else:
        word = editWord.replace(editWord[0], " ").replace(editWord[-1], " ")
        palindrome(word)
        return stringOne

print(palindrome("area"))

当用单个字母进行测试时,它可以正常工作,如果我测试像“are”这样显然不是回文的单词。但是,如果我将单词 area 称为“A palindrome”,则它不是。这使它看起来好像没有再次调用我的函数。关于为什么会发生这种情况的任何建议?

标签: python

解决方案


为了使递归在此处正常工作,您的 else 语句应该说“如果外部字符相等且其余字符也是回文,则该单词是回文”。相反,您的代码将所有出现的外部字符替换为空格,检查该单词是否为回文,并忽略结果以始终返回“是”。

您可以使用切片而不是替换进行适当的递归:

else:
    return palindrome(editWord[1:-1])

推荐阅读