下递归在代码中是如何工作的


def isPal(s):
if len(s) <= 1:
print(s)
else:
print(s)
s[0] == s[-1] and isPal((s[1:-1]))
print(s)
print("HI")
x = isPal("deleveled")
print(x)

输出:

deleveled
elevele
level
eve
v
HI
eve
HI
level
HI
elevele
HI
deleveled
HI
None

让我们分解一下这个程序。

首先,如果给定给isPal((的字符串是一个或零个字符,则打印它。换句话说,一旦我们不能再简化了,我们就停止简化,只输出我们所拥有的。

否则(当我们有两个或多个字符时(,我们检查第一个和最后一个字符是否相等,然后对没有这两个字符的字符串执行相同的算法。这种情况一直持续到我们有一个或零个字符,如上所述。

单词在末尾重建的原因是,在递归函数调用后,您再次打印了字符串。因此,在"深入"你的单词后,你也会打印出你来自哪里。

编辑:之所以打印"HI",是因为在你深入单词并返回单词后,你每次都会打印"HI"。因此,每次你从程序中后退一步(在开始和结束处再后退一个字母(,你就会打印"HI"。

我认为代码的问题在于,您实际上并没有告诉函数用True或False来回答"isPal"问题。

def isPal(s):
if len(s) <= 1:
print(s)
return True
else:
print(s)
return (s[0] == s[-1] and isPal((s[1:-1])))
x = isPal("deleveled")
print(x)

此代码现在将返回True或False,这取决于您的算法是否检测到字符串是回文。

您的代码实际上完成了您想要的操作,只是没有返回检查结果。

最新更新