我刚开始学习python之后的计划。是否允许sum+=alist[0]+sumup(alist[1:])
这样的递归?我收到了错误
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
代码:
m=int(input())
c=list(map(int,input().split()))
x,y=map(int,input().split())
sum=0
def sumup(alist):
global sum
if alist==[]:
return 0
else:
if sum<x:
sum+=alist[0]+sumup(alist[1:])
elif sum>=x:
return sum
elif sum>y:
return 0
sumup(c)
答案 0 :(得分:6)
您忘记了if sum <x:
子句中的return语句:
if sum<x:
sum+=alist[0]+sumup(alist[1:])
应该是
if sum<x:
sum+=alist[0]+sumup(alist[1:])
return sum
还有另一种情况 - 如果sum <= y
你没有返回任何东西。 (您可能希望摆脱elif sum>y
子句,因为这种情况永远不会发生。)
答案 1 :(得分:5)
对于None
不为空且alist
为sum < x
的情况,您的递归函数会返回True
。
然而,您需要摆脱global sum
,因为无论您从递归调用返回什么,最终都会添加到该值。这只会导致价值翻倍。
最多使sum
成为函数的参数,以将值传递给递归调用。您没有向我们提供示例输入和输出,因此非常很难确定您要使用该函数实现的目标。
最后但并非最不重要的是,elif sum > y:
分支永远不会被执行,因为sum < x
和sum >= x
之一永远是True
。