【问题标题】:"return False" completely ignored? [duplicate]“return False”完全忽略? [复制]
【发布时间】:2020-11-04 12:09:41
【问题描述】:

所以我正在开发一个辅助函数来帮助解决我最近从课堂上收到的一个递归问题,这就是它的样子:

def helper(a, b):
    if (a % b == 0 and b > 1):
        return False
    elif (a%b != 0 and b > 1):
        helper(a, b - 1)

如果我输入 (12, 11) 之类的内容,我希望结果为 False,但结果却是 None!为什么这样做?如果我用 print 语句替换“return False”,结果很好,所以看起来 return 语句被完全忽略了。我应该如何解决这个问题?谢谢!

【问题讨论】:

  • return helper(a, b - 1)

标签: python


【解决方案1】:

你必须返回最后一行的结果:

def helper(a, b):
    if a % b == 0 and b > 1:
        return False
    elif a % b != 0 and b > 1:
        return helper(a, b - 1)  # <--- Return a value here.

另外,如果b &lt;= 1,Python 既不会执行if 也不会执行elif 分支。 在这种情况下,函数将返回None


为什么我必须在调用helper之前使用return

让我们看看 a = 8, b = 5 的情况。a % b != 0 and b &gt; 0True,函数将调用 helper(8, 4)

helper(8, 4)是一个新的函数调用,与helper(8, 5)无关。它将检查是否a % b == 0 and b &gt; 1(即True),并将False返回到调用helper(8, 4)的位置。

如果helper(8, 4) 之前没有return 语句,您的第一个函数调用(helper(8, 5))将执行helper(8, 4),但不会对从它返回的值做任何事情。

您必须使用return 告诉调用者执行的结果是什么。

【讨论】:

  • 感谢您的精彩解释
  • 非常感谢!
猜你喜欢
  • 2020-03-23
  • 2014-09-03
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多