【问题标题】:Python: Calling multiple recursions simultaniouslyPython:同时调用多个递归
【发布时间】:2012-12-18 20:14:57
【问题描述】:

我收到此错误:

TypeError:+ 的不支持的操作数类型:“int”和“NoneType”

对于此代码:

def a(n):
    if n < 0:
        return 0
    if n == 1:
        return 1
    if n > 1:
        return a(n-1) + a(n-2) + a(n-3)

我应该如何调用多个递归?

【问题讨论】:

  • 进行递归时,确保你的函数总是返回一些东西。在您的情况下,您的 if 语句中遗漏了一些情况,因此快速解决方法是在函数末尾添加 return 0 之类的内容。
  • 某事告诉我您遗漏了一个案例。如果n == 2 会发生什么?应该还有另一种情况来处理这个问题。
  • 附带说明,这是一种非常低效的生成 Tribonacci 数的方法。简单的a, b, c = b, c, a + b + c 会更好。

标签: python recursion


【解决方案1】:

您缺少条件:-1 &gt; n &gt;= 0。因此,如果您的n &gt;= 0n &lt; 1,您不会返回任何值。

可能你的第一个条件应该是:-

if n < 1:
    return 0

【讨论】:

    【解决方案2】:

    详细说明 Rohit 的答案:如果一个 python 函数到达末尾没有返回任何内容,那么它会隐式返回 None。所以a(0.5) 将返回None。如果你调用例如a(1.5),那么你最终会得到a(0.5)+a(-0.5)+a(-1.5),它的计算结果是None+0+0,这会给你描述的错误。

    【讨论】:

    • o.O.即使是整数值也会出错。试试n = 3
    【解决方案3】:

    问题是n = 0时,没有if语句来处理这个,所以python函数隐式返回一个NoneType对象,改成这个:

    def a(n):
        if n <= 0:
            return 0
        if n == 1:
            return 1
        if n > 1:
            return a(n-1) + a(n-2) + a(n-3)
    

    【讨论】:

      【解决方案4】:

      试试这个:

      def a(n):
          if n <= 0:
              return 0
          elif n == 1:
              return 1
          else:
              return a(n-1) + a(n-2) + a(n-3)
      

      诀窍在于,您必须涵盖所有可能的值。你没有覆盖n == 0,最后一个条件应该是else,所以很明显没有其他选择。

      请注意,错误unsupported operand type(s) for +: 'int' and 'NoneType' 之前发生过,因为如果不满足任何条件(例如,当n == 0 时),则返回None,并且在递归的某个时刻,int 被添加到None,导致错误。这就是为什么在涵盖递归中的所有可能性时非常详尽非常重要,确保考虑到所有可能的情况。

      顺便说一句:有件事告诉我你漏掉了一个箱子。如果 n == 2 会发生什么?应该还有另一种情况来处理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-10
        • 1970-01-01
        • 2021-03-13
        • 2018-11-07
        相关资源
        最近更新 更多