[英]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.