繁体   English   中英

python中的递归函数

[英]Recursive functions in python

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

您在if sum <x:子句中忘记了返回语句:

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

对于alist不为空且sum < xTrue的情况,您的递归函数将返回None

但是,您将需要在这里摆脱global sum ,因为您最终将通过递归调用返回的值加到该值上。 那只会导致价值翻倍。

最多将sum作为函数的参数,以将值传递给递归调用。 你没有为我们提供样品的输入和输出,所以很难确定你正在努力实现与功能是什么。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM