Python:同时调用多个递归

时间:2012-12-18 20:14:58

标签: python recursion

我收到了这个错误:

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)

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

4 个答案:

答案 0 :(得分:4)

你错过了这个条件: - 1 > n >= 0。因此,如果您的n >= 0n < 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会发生什么?应该有另一个处理这个问题的案例。