Python 字符串上的递归:行';返回s[0]==s[-1]和isPal(s[1:-1])';做
我目前正在使用MITx和字符串递归处理6.00.1x,但下面的代码确实让我感到困惑。这是用来判断一个字符串是否是回文(一个前后读相同的字符串),我使用Python 字符串上的递归:行';返回s[0]==s[-1]和isPal(s[1:-1])';做,python,recursion,Python,Recursion,我目前正在使用MITx和字符串递归处理6.00.1x,但下面的代码确实让我感到困惑。这是用来判断一个字符串是否是回文(一个前后读相同的字符串),我使用abcba作为测试字符串: def isPalindrome(s): def toChars(s): s = s.lower() ans = '' for c in s: if c in 'abcdefghijklmnopqrstuvwxyz':
abcba
作为测试字符串:
def isPalindrome(s):
def toChars(s):
s = s.lower()
ans = ''
for c in s:
if c in 'abcdefghijklmnopqrstuvwxyz':
ans = ans + c
return ans
def isPal(s):
if len(s) <= 1:
return True
else:
return s[0] == s[-1] and isPal(s[1:-1])
return isPal(toChars(s))
isPalindrome('abcba')
def isPalindrome:
def toChars(多个):
s=s.下()
ans=“”
对于s中的c:
如果“abcdefghijklmnopqrstuvxyz”中的c:
ans=ans+c
返回ans
def isPal(s):
如果len(s)那么你必须一步一步地思考:
您将abcba
传递给isAlindrome
isPalindrome
调用isPal(toChars))
tocars
返回“abcba”
,因此这将传递给isPal(…)
isPal
通过参数调用“abcba”
检查:len(s)是什么让您认为s[0]==s[-1]
表达式被忽略了?试着输入一个不是回文的字符串,你会发现它有效果。@PatrickArtner这是麻省理工学院课程“计算机科学与编程入门Python”中的代码(顺便说一句,这是非常棒的)。我相信这是一个教递归的教育性例子。而且,这个问题不应该被否决,IMO.尝试理解递归函数没有错。在像abcde
这样的输入上尝试一下,看看它是否真的执行了递归调用,然后再测试第一个和最后一个字符是否相等。和
是一个短路运算符,因此,如果比较结果为False
,则不应执行递归调用。该问题声称步骤7发生在步骤6之前,并询问原因。谢谢!您的解释非常清楚,并且真正解释了代码的行为,我想我对连接中递归是如何工作的有点困惑,但现在已经清楚了