我是Python的新手(或编程),我正在尝试学习递归。
我编写了一个递归python函数来检查一个句子(不是一个单词)是否是回文。
def checkPalindrome(sentence):
sentence = re.sub('[^\w]', '', sentence.lower())
if len(sentence) == 1:
return True
elif len(sentence) == 2:
return sentence[0] == sentence[1]
else:
return checkPalindrome(sentence[1:-1])
此功能有效并提供正确的结果。例如:
checkPalindrome('Go hang a salami; I’m a lasagna hog')
True
但是,由于我在函数开头删除空格,标点符号和更改句子的大小写,因此将在每次递归调用时计算此步骤。
有没有更好的方法来重写函数以避免这种情况?
答案 0 :(得分:2)
我认为你刚回答了自己的问题:编写一个函数来减少输入小写字母并调用第二个函数。第二个函数进行回文检查和递归。
但是,请注意,您的功能不起作用:它唯一一次检查结束字符是否在len(句子)== 2的基本情况下。您需要在递归调用之前检查,也是:
else:
return sentence[0] == sentence[-1] and
checkPalindrome(sentence[1:-1])
鉴于此,您还可以结合两种基本情况:
if len(sentence) <= 1:
return True
根据@Joran的建议编辑。我最近一直生活着太多的编译器优化; Python语言定义不保证我的原始内容;在一般情况下,此更新将更有效。