我收到了这个错误:
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)
我应该如何调用多个递归?
答案 0 :(得分:4)
你错过了这个条件: - 1 > n >= 0
。因此,如果您的n >= 0
和n < 1
。
可能是你的第一个条件应该是: -
if n < 1:
return 0
答案 1 :(得分:1)
详细说明Rohit的答案:如果python函数到达结尾而没有返回任何内容,那么它隐式返回None。因此a(0.5)
将返回None
。如果你打电话给a(1.5)
,那么你最终会得到a(0.5)+a(-0.5)+a(-1.5)
,评价为None+0+0
,这会给你所描述的错误。
答案 2 :(得分: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)
答案 3 :(得分: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
,最后一个条件应该是else
,因此明确表示没有其他选择。
请注意错误unsupported operand type(s) for +: 'int' and 'NoneType'
之前发生过,因为如果没有满足任何条件(例如,当n == 0
时),则返回None
,并且在递归中的某个时刻int
已添加None
,导致错误。这就是为什么在递归中涵盖所有可能性时非常详尽的原因,确保考虑所有可能的情况。
顺便说一下:有些东西告诉我你错过了一个案子。如果n == 2会发生什么?应该有另一个处理这个问题的案例。