1

我收到此错误:

类型错误:+ 不支持的操作数类型:“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)

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

4

4 回答 4

4

您缺少条件: - 1 > n >= 0。因此,如果您的 and ,您不会返回任何n >= 0n < 1

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

if n < 1:
    return 0
于 2012-12-18T20:16:12.327 回答
1

详细说明 Rohit 的回答:如果一个 python 函数到最后没有返回任何东西,那么它会隐式返回 None。所以a(0.5)会回来None。如果你调用 eg a(1.5),那么你最终会得到a(0.5)+a(-0.5)+a(-1.5)which 评估 to None+0+0which 给你你描述的错误。

于 2012-12-18T20:19:25.523 回答
0

问题是当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)
于 2012-12-18T20:22:42.523 回答
0

尝试这个:

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,最后一个条件应该是 an else,所以很明显不能有其他选择。

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

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

于 2012-12-18T20:23:37.880 回答