Kie*_*lle 2 python recursion palindrome python-3.x
几个小时前我在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))
Run Code Online (Sandbox Code Playgroud)
我遇到问题的部分是
return s[0] == s[-1] and isPal(s[1:-1])
Run Code Online (Sandbox Code Playgroud)
我想知道为什么他们被退回,为什么它是[1:-1]而不是s [0:-1]如果你认为你知道任何有助于简化递归的好地方我随意分享他们.提前致谢.
为什么它是[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.