【发布时间】:2021-12-15 00:41:28
【问题描述】:
我有这段代码可以使用辅助函数递归地检查回文。
def palindrome(s):
return is_palindrome(s, 0, len(s) - 1)
def is_palindrome(s, left, right):
if right <= left:
return True
else:
return s[left] == s[right] and is_palindrome(s, left+1, right-1)
palindrome("racecar")
它工作得很好,但我不明白的是,它不应该返回 4 True 吗?由于“racecar”是回文,else 语句以及 return 语句和布尔运算符被执行三次(即“r”、“a”、“c”),而 if 语句被执行一次,因为唯一的“e”。所以,对我来说,总共有 4 个True。但是,它只产生 1 个True。为什么会这样?
【问题讨论】:
-
每次调用只有一次返回。对于除最外层之外的所有函数,该返回值都被执行调用的函数“吸收”。最终,
is_palindrome将 True 返回到palindrome,这会将 True 返回到最外面的调用。它们不会累积。 -
@TimRoberts 所以从技术上讲,return 语句被执行了多次,但最终被最后一个覆盖了?
-
该函数返回一个布尔值(True 或 False)。函数的最后一行
return s[left] == s[right] and is_palindrome(s, left+1, right-1)是两个布尔值的逻辑与。这是逻辑,不是加法。在布尔算术中,1 AND 1 = 1。1 AND 1 AND 1 AND 1 不是 4,而是 1。