我正在通过对列表中的所有元素求和来练习使用递归函数。
我做的功能是:
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这种非常灵活和宽容的语言中出现这样的问题?
答案 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,而不是无。或者你可以做到这一点。