我收到此错误:
类型错误:+ 不支持的操作数类型:“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)
我应该如何调用多个递归?
您缺少条件: - 1 > n >= 0
。因此,如果您的 and ,您不会返回任何n >= 0
值n < 1
。
可能是您的第一个条件应该是:-
if n < 1:
return 0
详细说明 Rohit 的回答:如果一个 python 函数到最后没有返回任何东西,那么它会隐式返回 None。所以a(0.5)
会回来None
。如果你调用 eg a(1.5)
,那么你最终会得到a(0.5)+a(-0.5)+a(-1.5)
which 评估 to None+0+0
which 给你你描述的错误。
问题是当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)
尝试这个:
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 会发生什么?应该还有另一种情况来处理这个问题。