为什么此return语句在此python递归函数中引发错误?

时间:2019-06-15 01:37:18

标签: python recursion return

我正在通过对列表中的所有元素求和来练习使用递归函数。

我做的功能是:

def list_sum_recursive(input_list):

    #base case, list is empty
    if input_list == []:
        print("empty")
        return

    #recursive case
    else:
        #grab the first element
        head = input_list[0]
        del input_list[0]
        #return the sum of the head plus the sum of the rest of the list
        return head + list_sum_recursive(input_list)

此函数将引发此错误:

  

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

我确实找到了解决方案,使基本情况为return 0,而不仅仅是return

但是现在我很好奇普通的return是在做什么还是没有在抛出错误?为什么在python这种非常灵活和宽容的语言中出现这样的问题?

3 个答案:

答案 0 :(得分:0)

正如注释中指出的,不要在第一部分中返回None。而是返回0。

def list_sum_recursive(input_list):

    #base case, list is empty
    if input_list == []:
    #    print("empty")
        return 0

    #recursive case
    else:
        #grab the first element
        head = input_list[0]
        del input_list[0]
        #return the sum of the head plus the sum of the rest of the list
        return head + list_sum_recursive(input_list)

print(list_sum_recursive([1,2,3]))

运行程序可以给我们

$ python test.py
6

答案 1 :(得分:0)

只想给您一个Pythonic版本,希望您不要介意。

def list_sum_recursive(input_list):

    #base case, list is empty
    if not input_list:
        return 0
    #return the sum of the head plus the sum of the rest of the list
    return input_list.pop(0) + list_sum_recursive(input_list)

print(list_sum_recursive([1,2,3]))

答案 2 :(得分:0)

def list_sum_recursive(input_list):

    #base case, list is empty
    if input_list == []:
        print("empty")
        return

    #recursive case
    else:
        #grab the first element
        head = input_list[0]
        del input_list[0]
        #return the sum of the head plus the sum of the rest of the list
        x=list_sum_recursive(input_list)
        if(x==None):
            return head + 0
        else:
            return head+x

返回0,而不是无。或者你可以做到这一点。