我正在尝试用Python编写我的第一个递归函数。它应该用一个词作为输入,然后检查该词是否是回文。
这是我的代码:
def checkPalindrome(str):
if len(str) == 1:
return True
elif str[0] == str[len(str)-1]:
newstr = str.replace(str[0], "")
newstr = str.replace(str[len(str)-1], "")
checkPalindrome(newstr)
def main():
word = raw_input("Give a name: ")
if checkPalindrome(word):
print '%s is a palindrome' % word
else:
print '%s is NOT a palindrome' % word
if __name__ == '__main__':
main()
我遇到的问题是函数checkPalindrome()仅适用于1个字母的回文。它只返回True,例如" k"。对于非回文,它也正确地返回false。
但问题是:如果我给我的程序一个像wowow的回文,它应该通过调用自己返回True,直到字符串只有1个字符长,在这种情况下它应该通过检查字符串的长度为1返回true但是当我的程序在递归后返回True并且字符串只剩下一个字符后返回False!
我甚至检查过代码行"返回True"实际上是运行(通过调试器),它正在运行。但即使我进入回文,我最终也会在我的主函数中使用else语句。
有递归经验的人可以告诉我为什么我的函数似乎返回False,即使行"返回True"我进入回文时被叫了吗?