【问题标题】:Return statement logic返回语句逻辑
【发布时间】: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。

标签: python return


【解决方案1】:

您在这里没有使用循环。我想让你弄清楚,但你需要循环它。现在,它正在检查两个 R 并终止。想办法循环遍历每个字母。如果不能,请再次返回这里。

【讨论】:

  • 脚本正确。这显然是一个学习递归编程的练习,不需要循环。
  • 但这不是迭代的吗?我试图通过递归来解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多