簡體   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