python中的递归函数

时间:2013-11-07 21:08:22

标签: python recursion python-3.3

我刚开始学习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)

2 个答案:

答案 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不为空且alistsum < x的情况,您的递归函数会返回True

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

最多使sum成为函数的参数,以将值传递给递归调用。您没有向我们提供示例输入和输出,因此非常很难确定您要使用该函数实现的目标。

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