1

我刚开始在计划后学习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)
4

2 回答 2

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从句,因为那永远不会发生。)

于 2013-11-07T21:09:37.440 回答
5

您的递归函数在is not empty 和isNone的情况下返回。alistsum < xTrue

但是,您需要摆脱global sum这里,因为无论您从递归调用返回什么,您最终都会增加该值。这只会导致价值翻倍。

最多,sum为函数设置一个参数以将值传递给递归调用。您没有向我们提供示例输入和输出,因此很难确定您要使用该功能实现什么。

最后但并非最不重要的一点是,elif sum > y:分支永远不会被执行,因为其中之一sum < x并且sum >= x将永远是True

于 2013-11-07T21:10:02.073 回答