几个小时前,我观看了有关python递归的视频,然后重新创建了视频中制作的程序,因此该程序可以在我的Python版本中使用。该代码可以正常工作,但是有些地方我还不太了解它在做什么。
def lower(s):
s = s.lower()
return s
def isPal(s):
if len(s) <= 1:
return True
else:
return s[0] == s[-1] and isPal(s[1:-1])
def isPalindrome(s):
if isPal(lower(s)) == True:
print("{0} is a palindrome".format(s))
我遇到的问题是
return s[0] == s[-1] and isPal(s[1:-1])
我想知道的是为什么要归还它们,如果您认为知道任何可以简化递归的好地方,为什么要返回[[1:-1]而不是s [0:-1]?分享。提前致谢。
为什么是s [1:-1]而不是s [0:-1]
s[1:-1]
返回s
时,第一个和最后一个元素被切掉。s[0:-1]
返回s
,仅切掉最后一个元素。
您需要砍掉两端以保留回文属性(如果是回文),这是与中间等距的元素是相同的。如果仅切掉一端,则移动中间的那根(通常情况下)会破坏该不变式。
这涉及到自我递归的核心:您做一件事,然后委派一个具有相同属性的简单案例。
为什么返回s [0] == s [-1]和isPal(s [1:-1])
之所以返回此值,是因为它首先检查第一个和最后一个元素是否具有回文属性(如上所述),并且下一个“层”也具有该属性。如果外部对不相等,则不是回文,False
将返回。如果为true,则执行递归步骤;如果为True,则整个表达式返回True
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句