[英]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 < x
为True
的情况,您的递归函数将返回None
。
但是,您将需要在这里摆脱global sum
,因为您最终将通过递归调用返回的值加到该值上。 那只会导致价值翻倍。
最多将sum
作为函数的参数,以将值传递给递归调用。 你没有为我们提供样品的输入和输出,所以很难确定你正在努力实现与功能是什么。
最后但并非最不重要的一点是,永远不会执行elif sum > y:
分支,因为sum < x
和sum >= x
始终为True
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.